OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4437|回复: 0

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

[复制链接]

1141

主题

1153

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4900
金钱
4900
注册时间
2019-5-8
在线时间
1248 小时
发表于 2022-4-18 14:52:52 | 显示全部楼层 |阅读模式
以下文章来源于:公众号:开源电子网,读取更多技术文章,请扫码关注



前言


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

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



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



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



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



    这里特别需要几点:


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


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





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



    具体接线图如下:





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



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





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

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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