你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 SPI从机用DMA方式实现全双工,数据传输过程中出错。

[复制链接]
lzylzy1212 提问时间:2024-12-18 18:07 / 未解决

STM32配置成从机全双工,采用DMA方式,出现一个问题:当我把DMA方式配置成DMA_CIRCULAR后,数据在传输过程中就会CRC校验失败。

在完成上述相关配置后,在SPI初始化函数最后加上HAL_SPI_TransmitReceive_DMA(&hspi1,SpiSend,SpiRecv,6);开始传输。

数据传输具体情况是这样的,由主机SPI周期读取后我向主机传输一个实时变化的数据,这个数据在另一个定时器中处理并刷新得到。然后我在HAL_SPI_TxRxCpltCallback函数中把该数据传到SPI的发送DMA地址变量SpiSend,如下图所示:

image.png

另外附加一个crc校验码,但是主机收到的数据总是不对,且crc校验出错。

我用DMA方式配置成DMA_NORMAL的时候就不会有这个问题,数据是对的,但这样周期性的使用HAL_SPI_TransmitReceive_DMA,比较占用系统的资源。会导致数据刷新的速度变慢。因此想用DMA_CIRCULAR一劳永逸,但是不管怎么处理都有数据报错问题。

第一次来论坛提问,可能有表述不清楚的地方,谢谢大家。

收藏 评论5 发布时间:2024-12-18 18:07

举报

5个回答
butterflyspring 回答时间:2024-12-19 09:56:24

如果没理解错的话STM32做从机。
会不会是使用了循环模式的DMA 导致速度匹配不上的原因呢?

因为发送完6个数据后,DMA的发送请求还要从RAM中搬运数据,而这时候的完成中断中数据还没准备好。
反而是NORMAL 模式没有这个问题,等数据准备好再启动搬运呢?

另外,既然主机是定时查询,那么重新启动就跟得上速度。只要主机节拍别乱就行.
xmshao 回答时间:2024-12-19 13:43:01
你采用DMA循环接收,如果你SPI发送端采用8位CRC校验的话,DMA接收长度设置的比


发送数据大1即可。多的那个位置存放校验码。


其它也没啥特别的了。


我这边使用STM32G4开发板也验证通过。
rrr.png

lzylzy1212 回答时间:2024-12-23 16:35:49

xmshao 发表于 2024-12-19 13:43
你采用DMA循环接收,如果你SPI发送端采用8位CRC校验的话,DMA接收长度设置的比</p>
<p>

谢谢回答。应该不是crc校验本身的问题,我的crc代码是自己写的,而且也注意修改了发送接收字节Size。

我的从机用的SPI全双工通信模式,接收数据也没问题,问题出现在我从机发送的数据。

我理解应该DMA circle这种方式,是在随机时刻搬运该数据的,而该数据在另外一个中断实时刷新,搬运过程中又由于中断的原因数据的某个字节已经发生改变,因此数据不统一,所以crc校验出错。

现在因为程序思路有改变,不需要数据在定时器实时快速刷新,已经放弃circle这种方式了,用normal方式可以稳定的传输数据。

lzylzy1212 回答时间:2024-12-23 16:41:56

butterflyspring 发表于 2024-12-19 09:56
如果没理解错的话STM32做从机。
会不会是使用了循环模式的DMA 导致速度匹配不上的原因呢?</p>
<p>

谢谢回答。我也觉得是数据没有准备好,或者是发送过程中被中断修改了部分数据,导致crc错误,数据异常的。

问题就是不知道怎么去控制这种circle方式去发送准备好的数据。之前做SPI通信,经常会使用spi State去判断状态,而circle的话,spi State一直都是BUSY状态;传输完成回调函数也没解决。

已经放弃circle方式了,程序思路有些改变,normal也能很好传输,且稳定。

xmshao 回答时间:2024-12-23 16:53:36

lzylzy1212 发表于 2024-12-23 16:35
谢谢回答。应该不是crc校验本身的问题,我的crc代码是自己写的,而且也注意修改了发送接收字节Size。 ...

[md]哦, 那算是一种出问题的可能吧。

如果循环模式每次数据个数不统一就比较难办。如果能每次保证一帧数据个数及内容是固定的,DMA传输每次都是从头开始就不该有问题。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版