【嵌入式】STM32实现SPI双机通信的一些细节(3)问题汇总

Q1:从机移位寄存器已全部为主机数据时,是否需要主机时钟信号驱动来将数据移送至接收缓冲区?

背景

主机:初始化时只使能接收中断,需要被发送的数据准备好后,使能发送中断,立即发送;
从机:初始化时使能发送、接收中断,此时会立刻触发一次发送中断,在发送中断中执行 SPI_I2S_SendData(User_SPI, SPI_Slave.response);按照我的理解,从机的时钟由主机控制,因此虽然执行了这个函数,也只是将数据放入发送缓冲区等待主机发送;

主要流程:

  1. 主机首先执行帧创建函数,将需要发送的数据准备好;
  2. 调用发送函数,实际上就是使能发送中断;
  3. 发送中断被立刻触发,将帧数据发送出去,从机响应;

问题描述

当从机的移位寄存器已经全部为主机的数据时,是否需要主机的时钟信号驱动移位寄存器将数据移送至接收缓冲区?
为了调试程序,我在主机发送中断里的SPI_I2S_SendData处打了一个断点,当主机发出第一个字节时会再次触发该中断,但此时并没有触发从机的接收中断。
在这里插入图片描述
啊!!!!!!我傻了。昨天还反复告诉自己发送中断是在数据从发送缓冲区移入移位寄存器时触发,这触发的时候移位寄存器还没动呐!当然不会触发从机的中断啊!又是一次在写博客的时候发现了问题,看来以后真得坚持总结。回过头来,想了一下自己刚刚提的问题,移位寄存器移出至接收缓冲区需要主机的SCLK驱动么?应该是不需要的吧?当完成第一个字节的数据交换后,
在这里插入图片描述
从上图可以看到,在主从机交换数据到当前字节的最后一位时,RXNE标志位在SCLK下降沿到来之前就被置位了,按照我自己的理解是,这代表着最后一位数据一交换就会自动将数据移至接收缓冲区并触发中断,哪怕此时SCLK的下降沿没有来。这个目前看也无法设计一个比较好的方案验证它。

Q2:接收中断与下一个发送中断

背景

SPI全双工通信本质上是数据的交换,例如:主机在向从机写数据的同时,也会读取从机的数据,这就要求从机本身要发送相应的数据给主机。何不利用这一个字节做些事情呢?这是我设计双机通信的时候考虑的一个内容。

还是以主机向从机写数据为例(发送一个完整的数据帧,其中包含帧信息以及实际需写的数据):从机接收主机的帧数据进行解包阶段返回给从机FEED字节,当接收到最后一个字节即校验和后,如果当前帧有效,返回ACK字节,无效则返回FAIL字节。这三个字节具体是什么内容是完全根据自己的想法设计的,选择几个不太容易遇到的字节即可例如0XFE,0XEE等等。

重点
主机和从机的首个待发送字节一旦放入移位寄存器进行交换,就会触发SPI发送中断,从而将下一个字节放入发送缓冲区;当数据交换完成后再触发首个字节的接收中断。如下图:
接受发送中断先后
(这里有一个我的假设,6中的下一轮发送中断一定在5中的接收中断之后触发,这个需要验证一下才能知道,因为它们是属于同一个中断,所以后触发的会等到前一个执行完成后才会执行后一个中断。这意味着什么?意味着我可以在接收中断中修改从机的参数,进而影响从机下一个发送中断中所要返回的响应字节 它的重要性在于,可用来设计从机接收到主机的完整帧后的响应机制。如下图(手写更方便……)
SUM
从上面手写的示意图中可以看到一个非常重要的机制:主机的发送中断中,将SUM放入发

  • 15
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
### 回答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通信功能,可以方便地实现双机通信,为各种应用提供高效、可靠的数据交换解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值