【嵌入式】STM32实现SPI双机通信的一些细节(2)片选总结

本文介绍了STM32 STM32F4系列中SPI通信的软件和硬件片选机制。重点讨论了手册中的示意图误解、理想的硬件片选操作、主机软件片选的优势以及从机的硬件和软件片选应用。通过实例说明了如何初始化SPI以实现不同片选模式,并指出主机选择软件片选便于多从机管理,从机硬件片选配合简化配置。
摘要由CSDN通过智能技术生成

SPI片选总结

本文基于STM32F4系列。

虽然说一主一从好像和片选没什么关系但是不搞清楚总觉得心里发慌,但是不搞不知道,一搞折腾了我好几天。目前我接触到的很多示例代码包括正点原子的教学视频中,对于软件片选的选择显得理所当然,几乎没有设置为硬件片选的情况。《STM32中文参考手册》中关于软硬件片选讲的很混乱,看了好几遍也摸不着头脑。下面我就按照自己目前理解到的内容进行一些总结吧,如果有不对的地方请大家指正。

坑爹的手册示意图

关于SPI软硬件片选,最开始思考方式完全是错误的,就是由于看不懂一张示意图,我的妈耶也不知道怎么搜索,直到这两天看了一篇博客才真正了解了它的含义。
SPI片选选择器
这张图在SPI的原理框图中很容易找到,下面就对它进行一个解释。对于从机SPI寄存器CR1中的SSM位,置1时代表软件片选,置0时代表硬件片选。上图的意思是,如果SSM置0,则内部NSS由外部NSS引脚电平确定;如果SSM置1,则外部NSS引脚无效了,随你怎么用,哪怕是复用为SPI_CS也起不到任何作用,因为内部的NSS电平是由SSI位决定的。天哪!这么简单的一个含义!折腾了我那么久,哪些仁兄能告诉我这种示意图叫什么?我以后要是遇到其他的也好去查查含义,我最开始竟然以为是个“与”门,日。

理想中的硬件片选

按照手册上的说法,如果选择了硬件片选,那么对于从机而言,就要将PA4即默认的片选引脚与主机片选信号相连,来作为从机片选信号的来源,低电平代表被选中,高电平代表未被选中。我在测试的过程中发现,如果将从机设置为硬件片选模式,无论主机电平是高还是低,都能接收到数据。这就和手册上说的有出入了,就在写这篇文章的时候我突然想起来,丫的我从机代码最开始是在主机代码的基础上改的,没有使能复用PA4引脚当然没用啦!加了两条语句果然,硬件片选模式下的从机,PA4接收到高电平时是不会触发中断即不会接收数据的,拉低则可以,完美解决。
也就是说,硬件模式对从机是非常友好的,没有任何问题。当然啦,什么SSOE支持多主或者动态切换这方面的问题我还没有去好好研究,后面有机会再看!虽然应该是不会再看了。。

问题出在主机上。如果主机选择了硬件模式,一般都会以为片选引脚会在发送时自动拉低,在结束发送时自动拉高,但是实际上,手册上的说法是:使能SPI后片选引脚就会输出低直到关闭SPI(对于我的使用场景,就算你一直拉低也没什么哈)。具体的内容可以参看如下博客:这篇博客相比我看过的大量垃圾复制粘贴博客好很多,让我一下子解决了问题:https://www.cnblogs.com/shangdawei/p/4756415.html

主机软件片选就对了

主机选择软件片选后,内部NSS会自动保持高电平(也就是SSI),好像是为了维持自己的主机状态,这个可以去看初始化函数定义以及SPI寄存器定义,就可以知道了。如下图:
左侧是SPI_Init函数内部,可以看到CR1寄存器是一堆参数的或运算;
右上角是软硬件片选模式选择,可以看到软件模式是将CR1寄存器的SSM位置1即使能软件片选;
右中是主从机模式选择,可以看到当选择主机模式时,实际上是将CR1的SSI和MSTR位置1;
SPI_Init与CR1寄存器
记住一句话,选择了软件片选以后,原先的SPI_CS引脚就可以随便用了,你甚至可以直接不复用PA4为SPI_CS,可以把它配置成普通GPIO口输出高低电平来控制一个从机。 当然,选择主机的其他任何一个GPIO口都是可以的。软件片选意味着,选谁已经完全由代码来决定了,有几个从机就要使用几个GPIO口来对应从机,当然可以使用一个扩展器来节约GPIO口(类似编码解码的功能),给谁输出低电平就是和谁交换数据。这样多方便啊。

从机硬件片选

实际上先前已经提到过,从机的硬件片选比较简单,使用默认的SPI_CS引脚作为片选信号的来源就可以了。因为硬件模式下时,SPI的内部NSS电平由外部NSS控制,所以从机的配置会很简单。最开始我以为主从机的软硬件片选应当保持一致,但是现在我的观点是:主机选择软件片选对于一主多从很方便,从机选择硬件片选配合,这样比较好。

从机软件片选

从机的软件片选是比较麻烦的。因为,从机的内部NSS电平是由从机CR1寄存器的SSI位决定的。同时,如果从机选择了软件片选,那么原本可以复用成SPI_CS的引脚也和普通引脚没有区别了。在标准库中,有一个函数是:SPI_NSSInternalSoftwareConfig(User_SPI,SPI_NSSInternalSoft_Reset)。这个函数就是用来控制CR1寄存器的SSI位的。这就很明显了,我们可以随便指定从机的一个GPIO口与主机的片选引脚连接,使能外部边沿中断,在中断中判断如果拉低就调用上述函数将从机内部NSS拉低以片选,反之则取消片选。

这么做不是绕了很大的一圈么?为什么不直接用硬件片选呢?我没有意识到软件片选对于从机有什么其他的好处,如果有我没考虑到的请大家指点一下哈。

代码

主机软件片选SPI初始化

void SPI_INIT()
{
   
  	GPIO_InitTypeDef  GPIO_InitStructure;
	SPI_InitTypeDef   SPI_InitStructure;
	NVIC_InitTypeDef   NVIC_InitStructure;

	RCC_AHB1PeriphClockCmd(</
### 回答1: STM32F4系列芯片作为常用的微处理器之一,其SPI接口作为一种串行外设接口拥有广泛的应用场景。在双机通信方面,STM32F4的SPI接口可以用于同步传输数据,并且具有高可靠性、高效率等优点,因此被广泛应用于嵌入式系统、工业自动化、医疗设备等领域。 SPI接口是单主模式或多主模式的集成电路外围设备的通信协议,可以使用单线、双线或四线方式进行通信,其中四线方式通信具有传输速率快、可靠性高的特点。在STM32F4芯片中,SPI管理器包含两个SPI接口,在实现双机通信时通常采用其中一个作为主机,另一个作为从机,通过访问它们之间共享的数据缓存区,可以实现双向数据传输。 在STM32F4的SPI双机通信中,主机负责发起数据传输请求和接收从机的应答信息;而从机则负责接收主机的数据传输请求,并传送数据给主机。通常情况下,主机和从机之间的数据传输可以采用DMA方式进行,这样可以有效减少CPU的负载,提高系统的效率。 在使用STM32F4的SPI双机通信时,需要注意以下几点:首先,需要根据实际通信需求选择SPI接口的通信模式和数据格式;其次,需要配置SPI接口的时钟频率和时钟相位;最后,根据数据传输的类型选择合适的收发缓冲区、中断和DMA处理方式,以保证通信的可靠性和效率。 通过合理的配置和使用,STM32F4芯片的SPI接口可以实现高效可靠的双机通信,为各种嵌入式系统提供核心支持。 ### 回答2: STM32F4是一款高性能的微控制器,拥有丰富的外设,包括SPISPI(Serial Peripheral Interface)是一种常用的串行通信接口,其工作原理是通过一个主控器和多个从设备之间进行通信。 在STM32F4中,如果要实现SPI双机通信,需要将一个STM32F4作为主控器,另一个作为从设备。首先,主控器需要将其SPI外设的主/从模式设置为主模式,并设置时钟频率、数据位数等参数。接着,从设备需要将其SPI外设的主/从模式设置为从模式,同样设置时钟频率、数据位数等参数。 在通信过程中,主控器会发送一个信号,用来表示开始通信,然后将要发送的数据通过SPI总线传输给从设备。从设备收到数据后进行读取,并将读取的数据再通过SPI总线发送回主控器,同时主控器也可以读取从设备传来的数据。 需要注意的是,在双机通信中,主从设备的参数设置需要保持一致,否则通信可能会失败。另外,SPI通信具有高速传输、低功耗等优点,但传输距离较短,只适合短距离通信。 综上所述,STM32F4的SPI双机通信需要主控器和从设备统一设置参数,并通过SPI总线进行数据传输,具有高速传输和低功耗等特点,并适用于短距离通信场景。 ### 回答3: STM32F4是一款高性能的微处理器,具有强大而灵活的SPI(串行外设接口)功能,其用途广泛,被广泛应用于工业控制、电子仪器、嵌入式系统、汽车电子等领域。 SPI双机通信是指两个或多个STM32F4芯片之间通过SPI接口进行数据交换的过程。在SPI通信中,一个芯片作为主设备,另一个芯片作为从设备。主设备通过SPI接口向从设备发送数据,从设备将接收到的数据返回给主设备。 在STM32F4的SPI接口配置中,需要设置每个设备的模式、时钟极性和相位、数据位数等参数,以确保正确的数据传输。一般而言,主设备的SPI时钟需要大于从设备,以保证数据可以正确的传输。 双机通信的具体实现需要在主设备的固件程序中编写发送数据的程序,而在从设备的固件程序中编写接收数据的程序,以实现两个设备之间的数据交换。此外,还可以加入检验位、重传机制等保证数据传输的可靠性。 总之,STM32F4具有强大的SPI通信功能,可以方便地实现双机通信,为各种应用提供高效、可靠的数据交换解决方案。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值