STM32的SPI接口、cubeMX软件配置SPI接口和分析SPI相关代码

网友投稿 372 2022-10-26

STM32的SPI接口、cubeMX软件配置SPI接口和分析SPI相关代码

STM32之SPI简介:

SPI协议【Serial Peripheral Interface】

SPI信号线

SPI 共包含 4 条总线。

SS(Slave Select):片选信号线,当有多个SPI 设备与 MCU 相连时,每个设备的这个片选信号线是与 MCU 单独的引脚相连的,而其他的 SCK、MOSI、MISO 线则为多个设备并联到相同的 SPI 总线上,低电平有效。

MOSI (Master Output Slave Input):主设备输出 / 从设备输入引脚。主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上数据的方向为主机到从机。

MISO(Master Input Slave Output):主设备输入 / 从设备输出引脚。主机从这条信号线读入数据,从机的数据则由这条信号线输出,即在这条线上数据的方向为从机到主机。

其中SCK,MOSI,MISO是接在一起的,NSS分别接到不同的IO管脚控制。主器件要和从器件通信就先拉低对应从器件的NSS管脚使能。默认状态IO1,IO2,IO3全为高电平,当主器件和从器件1通信时,拉低IO1管脚使能从器件1。而从器件2,3不使能,不作响应。下图是主器件与多个从器件通信图。

SPI特性

注:MSB(Most Significant Bit)是“最高有效位”,LSB(Least Significant Bit)是“最低有效位”。

控制寄存器 CR1掌管着主控制电路,STM32的 SPI模块的协议设置(时钟极性、相位等)就是由它来制定的。而控制寄存器 CR2则用于设置各种中断使能。

最后为 NSS引脚,这个引脚扮演着 SPI协议中的SS片选信号线的角色,如果我们把 NSS引脚配置为硬件自动控制,SPI模块能够自动判别它能否成为 SPI的主机,或自动进入 SPI从机模式。但实际上我们用得更多的是由软件控制某些 GPIO引脚单独作为SS信号,这个 GPIO引脚可以随便选择。

SPI时钟时序

根据时钟极性(CPOL)及相位(CPHA)不同,SPI有四种工作模式。

时钟极性(CPOL)定义了时钟空闲状态电平:

CPOL=0为时钟空闲时为低电平

CPOL=1为时钟空闲时为高电平

时钟相位(CPHA)定义数据的采集时间。

CPHA=0:在时钟的第一个跳变沿(上升沿或下降沿)进行数据采样。

CPHA=1:在时钟的第二个跳变沿(上升沿或下降沿)进行数据采样。

CubeMX软件配置SPI:

下面继续介绍cubeMX软件配置STM32L152的SPI接口方法。

(1)打开软件,选择对应芯片后,配置好时钟源;

(2)勾选SPI1为全双工,硬件NSS关闭,如下图:

(3)勾选好后,PA5、PA6、PA7如下图,在配置PA4为普通io口,gpio_output

(4)SPI1的参数配置选择默认,如下图所示

(5)生成代码,保存即可。

HAL库的SPI函数分析:

下面具体分析下生成的SPI函数和函数调用。

下面分析SPI的初始化函数:

利用SPI接口发送和接收数据主要调用以下两个函数:

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);//发送数据HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout);//接收数据

原文标题:STM32CubeMX-HAL库的SPI接口使用

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:专访 CNCF 大使张磊:让云原生不再是大厂专属
下一篇:Java实现简易学籍管理系统
相关文章

 发表评论

暂时没有评论,来抢沙发吧~