STM32单片机SPI的使用原理解析

发布者:DelightfulSmile最新更新时间:2024-09-27 来源: elecfans关键字:STM32  单片机  SPI 手机看文章 扫描二维码
随时随地手机看文章

1、SPI使用原理

以数据交换实现数据传输,第一个跳变沿实现数据输出,第二个跳变沿实现采样。如下图

STM32单片机SPI的使用原理解析

2、GPIO的配置

GPIO_InitTypeDef GPIO_InitStructure;

//配置SPI2管脚

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14| GPIO_Pin_15;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

GPIO_Init(GPIOB, &GPIO_InitStructure);

3、SPI配置

typedef struct

{

uint16_t SPI_Direction;//设置方向 (2线全双工、2线只接受、一线发送、一线接受)

uint16_t SPI_Mode; //模式 (从或主设备)

uint16_t SPI_DataSize; //宽度 (8或16位)

uint16_t SPI_CPOL; //时钟极性 (低或高)

uint16_t SPI_CPHA; //时钟相位 (第一个或第二个跳变沿)

uint16_t SPI_NSS; //片选方式 (硬件或软件方式)

uint16_t SPI_BaudRatePrescaler; //波特率预分频 (从2---256分频)

uint16_t SPI_FirstBit; //最先发送的位 (最低位,还是最高位在先)

uint16_t SPI_CRCPolynomial; //设置crc多项式 (数字)如7

}SPI_InitTypeDef;

//SPI2配置选项

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI2, &SPI_InitStructure);

//使能SPI2

SPI_Cmd(SPI2, ENABLE);

4、交换数据

u8 SPI_Exchange(SPI_TypeDef* SPIx,u8 Byte)

{

while((SPIx-》SR&SPI_I2S_FLAG_TXE)==RESET); //等待发送区空

SPIx-》DR=Byte; //发送一个byte

while((SPIx-》SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完一个byte

return SPIx-》DR; //返回收到的数据

}


关键字:STM32  单片机  SPI 引用地址:STM32单片机SPI的使用原理解析

上一篇:STM32单片机串口的定义及应用方法
下一篇:关于stm32的ad7792移植难题排解

推荐阅读最新更新时间:2024-11-09 10:07

STM32 FreeRTOS Keil环境搭建
由于FreeRTOS的官方已经支持STM32F1X系列的Cortex-M3的移植,所以只需要在Keil IDE中设置相关即可了; 在Keil中新建一工程,在工程中新建3个组,分别对应3个目录用来存放:user、rtos、stmlib user中添加用户自己的代码和头文件; rtos中添加rots的文件主要有:list.c、task.c、queue.c、head_2.c、port.c stmlib中添加STM32官方提供的STM32操作的lib库(注意stm32f10x_md.s中的内容和替换为FreeRTOS Demo 中的STM32F10X.s否则系统调度不能正常工作) 另外需要把FreeRTOS/source/inc
[单片机]
单片机学习】51单片机【中断系统】,详细介绍
一、先知先会 1、什么是中断? CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 形象一些,把这图“理解记住 2、什么是中断源? 引起CPU中断的根源,称为中断源。 解释:中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。 3、中断源具有的优点 随着计算机技术的应用,人们发现中断技术不
[单片机]
【<font color='red'>单片机</font>学习】51<font color='red'>单片机</font>【中断系统】,详细介绍
为何修改BASEPRI寄存器无效?
有STM32用户发现在操作BASEPRI特殊功能寄存器时,根本不起作用。比方,它目前配置了几个中断,优先级各不相同,按照STM32CubeMx里的配置分别为2、3、4不等,当他在BASEPRI寄存器里写这几个数字中的任意一个时,发现BASEPRI的数字始终是0,没有任何效果。 我们知道,通过配置 BASEPRI寄存器非0值来给系统中的中断响应设置门槛,当中断优先级低于某个级别时将不会得到CPU的响应执行,也就是说只有中断优先级高于某个级别时才能得到响应。下面截图是来自ARM CORTEX M4技术手册中有关BASEPRI寄存器的描述。 从这里可以看到该寄存器的有效配置位有8位,对其写0无意义,或者说放弃设置中断响应门槛功
[单片机]
为何修改BASEPRI寄存器无效?
STM32开发板中如何点亮一个LCD
网络上配套STM32开发板有很多LCD例程,主要是TFT LCD跟OLED的。从这些例程,大家都能学会如何点亮一个LCD。但这代码都有下面问题: 分层不清晰,通俗讲就是模块化太差。 接口乱。只要接口不乱,分层就会好很多了。 可移植性差。 通用性差。 为什么这样说呢?如果你已经了解了LCD的操作,请思考如下情景: 1、代码空间不够,只能保留9341的驱动,其他LCD驱动全部删除。能一键(一个宏定义)删除吗?删除后要改多少地方才能编译通过? 2、有一个新产品,收银设备。系统有两个LCD,都是OLED,驱动IC相同,但是一个是128x64,另一个是128x32像素,一个叫做主显示,收银员用;一个叫顾显,顾客看金额。怎么办?这些例
[单片机]
STM32端口复用和端口重映射?什么是端口复用重映射?
对于单片机而言,GPIO引脚配置是最基本的,也是最重要的,因为所有的(信号)输入和(控制)输出都是通过这些配置起作用的。这里就不得不提到单片机的复用功能AF(Alternate Function),这篇文章我们说一说复用功能。 STM32Fxx系列单片机的GPIO可以配置为浮空输入(input floating)、上拉输入(input pull-up)、下拉输入(input pull-down)、模拟输入(analog)、开漏输出(output open-drain)、推挽输出(ouput push-pull)、复用开漏输出(alternate function open-drain)、复用推挽输出(alternate fun
[单片机]
<font color='red'>STM32</font>端口复用和端口重映射?什么是端口复用重映射?
毕业设计| STM32单片机控制的智能家居系统设计
☞ 智能家居系统功能概述 上面视频演示的STM32智能家居的功能是: ✔ 通过语音识别和上位机App进行控制 ✔ 实现有人闯入自动警报 ✔ 照明控制,温度和湿度控制,空气质量测量,家用电器定时和自动窗帘等功能的控制 主控是STM32F103RCT6单片机,连接到每个传感器。通过LD3320语音芯片生成语音信号到MCU的串口,在串口识别出发送的数据后,可以控制每个传感器,还通过蓝牙HC05将AT命令连接发送到手机App的控制端,进而控制家电。 ☞ 离线语音识别功能: 该功能的语音识别词分为两级: 第一级识别词:“小白”用来唤醒智能家居系统,此时LD3320的模块灯常亮。 第二级识别词用来控制“家居”,如:“开灯”“
[单片机]
毕业设计| <font color='red'>STM32</font><font color='red'>单片机</font>控制的智能家居系统设计
学习STM32单片机,从菜鸟到牛人就是这样简单
想说,为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习STM32? 本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么STM32本身并不需要刻意的学习。 你要考虑的是, 我可以用STM32实现什么? 为什么使用STM32而不是8051? 是因为51的频率太低,无法满足计算需求?是51的管脚太少,无法满足众多外设的IO? 是51的功耗太大,电池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的内存太小而你要存储的东西太多? 当你需要使用STM32某些功能,而51实现不了的时候, 那STM32自然不需要学习,你会直接去寻找STM32某方面的使用方法。比如要用s
[单片机]
学习<font color='red'>STM32</font><font color='red'>单片机</font>,从菜鸟到牛人就是这样简单
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(4)EXTI 中断介绍
EXTI(中断/事件控制器)包含多个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。 4.1.GD32 EXTI 外设原理简介 GD32 EXTI 主要特性(以 GD32F30x 为例) ◼ 高效的中断处理; ◼ 支持异常抢占和咬尾中断; ◼ 将系统从省电模式唤醒; ◼ 3 种触发类型:上升沿触发,下降沿触发和任意沿触发; ◼ 软件中断或事件触发; ◼ 可配置的触发源; ◼ Cortex-M4系统异常; ◼ 多达68种可屏蔽的外设中断; ◼ 4位中断优先级配置位,可配置16个中断优先级; ◼ EX
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】GD32 <font color='red'>MCU</font> 常见外设介绍(4)EXTI 中断介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved