stm32基于HAL的spi主从双机通信

对于单片机应用中的通信,UART(通用异步收发传输)是最常见和简单的一种通信方式。它使用单根传输线实现全双工通信,可以实现较低的通信速率,常见的波特率都在1Mbps以下。UART通信的优点是简单易实现,适用于一般的通信需求。

然而,在需要高速数据传输或大数据量频繁交互的场景下,UART通信的速率可能无法满足要求。这时候可以考虑使用SPI(串行外设接口)或I2C(串行总线)等更高速的通信方式。

SPI是一种高速的同步串行通信接口,可以支持十几兆甚至几十兆bps的传输速率。SPI通信需要4根线(CLK、MISO、MOSI、CS)进行数据传输,相比于UART的单根传输线,需要更多的管脚连接。SPI通信在程序实现上相对复杂一些,但是它的高速传输能力使得它适用于高要求的通信场景。

I2C是一种使用两根线(SDA、SCL)进行数据传输的串行总线,支持多主机和多从机的通信。它的传输速率较低,一般在几百kbps的范围内,但是它具有简单的硬件连接和通信协议,适用于一些简单的通信需求。

综上所述,单片机应用中的通信方式选择需要根据具体的需求来决定。如果需要简单、易实现的通信,可以选择UART。如果需要高速传输或大数据量频繁交互的通信,可以考虑使用SPI或I2C。

这里的使用场景是两个stm32之间需要实现大量且频繁的数据传输。鉴于这一需求,我们选择SPI作为通信协议。尽管我之前在网上查阅过其他人的实现过程,但由于并非自己亲手操作,理解起来颇为困难。因此,我希望能以最简洁的方式来实现这一功能。在自己动手尝试并成功实现后,我发现自己的方法相对简便。于是,我决定撰写一篇文章,详细记录整个实现过程。

参考了安富莱V7开发板的SPI双机通信程序,不过安富莱的初始化SPI程序都是手写的,在移植过程中发现按照例程里初始化spi的参数来设置cubemx的选项比较麻烦,像我比较懒就尽可能的使用默认设置。这里我还使用了DMA减少资源消耗。

配置spi
在这里插入图片描述

  • 要根据自己的实际情况进行分频,在使用过程中发现频率高了会卡在spi的传输函数里一直while读取寄存器。
  • 硬件主从机的NSS也一定要打开。

打开DMA

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值