怎么看stm32spi是否有用(但是SPI从机玩过吗)

今日头条/西瓜视频/抖音短视频 同名:正点原子原子哥

感谢各位的关注和支持,你们的支持是原子哥无限前进的动力。

前言

在平常的开发中,很多时候我们使用SPI都是使用主机模式去驱动一些传感器、存储器等等,很少会用到SPI从机。有时候,我们又需要STM32的SPI配置为从机去接收数据,本文就是介绍如何使用探索者开发版配置SPI从机。

这里我们以探索者开发版标准库实验25SPI实验为基础例程进行修改。这里我们把SPI从机只定义为一个接收,所以没有发送数据的操作。SPI的基础知识需要大家自己去学习,这里着重说明使用方法。

接下来,我们来看一下具体代码实现。

SPI初始化函数修改为如下代码:

怎么看stm32spi是否有用(但是SPI从机玩过吗)(1)

这里特别需要几点:

①主机和从机的工作模式要一致,即时钟极性和时钟相位要一样。

②主机和从机的数据帧大小要一致,即8位或者16位。

③主机和从机的数据传输顺序要一致,即MSB或LSB。

以上代码跟原来程序不同点:

①SPI1的引脚使用的是PA4(SPI1_NSS),PA5(SPI1_CLK)和PA7(SPI1_MOSI)三个引脚即可了,因为不需要使用到发送功能,PA6(SPI1_MOSI)就不用配置了。(这些引脚复用信息可以查看原理图或者芯片数据手册)

②SPI_InitStructure.SPI_Direction设置为SPI_Direction_2Lines_RxOnly,即SPI设置为双线单向接收。这种情况下,主机的MOSI直接连接从机的MOSI即可。

③ NSS引脚的管理我们直接使用硬件管理,也就是需要对PA4(SPI1_NSS)进行操作,拉低就是选中,拉高就是释放片选。

④ 使能SPI的接收中断即SPI_ITConfig

(SPI1,SOI_I2S_IT_RXNE, ENABLE),还需要设置NVIC。

⑤ 由于是只接收,所以不需要调用SPI1_ReadWriteByte函数去发送数据。

此外,我们还需要编写SPI中断服务函数,代码如下:

怎么看stm32spi是否有用(但是SPI从机玩过吗)(2)

当主机拉低片选,发送数据过来,那么从机就会进入到接收中断,并且通过SPI_I2S_ReceiveData函数去SPI1->DR寄存器中获取到数据。当然我们获取完数据之后还得清除一下接收中断标记。

具体接线图如下:

怎么看stm32spi是否有用(但是SPI从机玩过吗)(3)

主机程序中通过按键发送不同数据,代码如下:

怎么看stm32spi是否有用(但是SPI从机玩过吗)(4)

从机接收的数据在串口助手中显示出来,如下图:

怎么看stm32spi是否有用(但是SPI从机玩过吗)(5)

通过这个简单的从机demo,大家就可以发挥想象做很多有趣的东西,把STM32弄成一个带有SPI接口的模组等等。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。