搜索
bottom↓
回复: 5

STM32做SPI主机很常见,但是SPI从机玩过吗?

[复制链接]

出0入234汤圆

发表于 2022-4-18 12:49:56 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2022-5-11 14:53 编辑

以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注
开源电子网,扫码2222222.png


前言


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

     (关注上方公众号回复“SPI”免费获取工程文件)



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



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



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

1.png

    这里特别需要几点:


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


②主机和从机的数据帧大小要一致,即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中断服务函数,代码如下:

2.png



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



    具体接线图如下:


3.jpg


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

4.png

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


5.png


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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2022-4-19 10:37:54 | 显示全部楼层
stm32从机

出0入0汤圆

发表于 2022-5-5 11:06:24 | 显示全部楼层
spi 做slave 用了好多年了。。。。

出235入235汤圆

发表于 2022-5-5 11:37:20 | 显示全部楼层
STM32做SPI从机前几天玩了1周,没搞定。HAL库。后来改为CLK触发中断的方法传输了,就是速度慢了点。

出0入0汤圆

发表于 2022-7-17 20:21:44 来自手机 | 显示全部楼层
能加个DMA吗

出0入14汤圆

发表于 2022-11-30 19:40:48 | 显示全部楼层
调试的时候看到了大神的这个文档,感觉有问题

//        if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_IT_RXNE)==SET)        //不能用此判断
        if(SPI_I2S_GetITStatus(SPI2, SPI_I2S_IT_RXNE) != RESET)        //接收中断

我开始也是使用上面的这个 SPI_I2S_GetFlagStatus 接收数据,发现是每两个字节进一次中断,配置是8位数据的,
造成始终不能正确的接收一帧数据,换成下面这个 SPI_I2S_GetITStatus 就可以了,每个字节进中断

还有,求教下面这个问题有好办法解决没?
https://www.amobbs.com/forum.php ... 1&highlight=SPI
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 13:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表