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

STM32G491 SPI库函数使用疑惑

[复制链接]
仲裁者 提问时间:2022-1-10 17:05 / 未解决

大家好,最近在使用SPI的DMA时碰到点问题,麻烦大家给看看,谢谢了

捕获1.PNG

上图是调用的SPI发送接收函数,2ms执行一次,buffer是16bit,SPI_BUFFERSIZE为1,DMA配置为half word,circular模式。

捕获2.PNG

接收buffer在回调函数中进行赋值,每次接收发送完一帧数据后会执行一次Abort函数来终止DMA连续发送。

问题如下: 按照图中所示的代码执行是没有问题的,spiData.in.key中可以正确赋值。但如果我将赋值语句放在了Abort后,spiData.in.key得到的值就一直是0,感觉aRxBuffer中的值在Abort函数中被清零了。

通过排查,发现是在Abort函数里的SPI_EndRxTxTransaction子函数会清,但这个函数我看了半天也没看懂为啥会清buffer,麻烦各位大佬帮我看看,是哪里出了问题,谢谢了

收藏 评论2 发布时间:2022-1-10 17:05

举报

2个回答
xmshao 回答时间:2022-1-11 15:46:31
根据你的信息指引,我也看了半天也实在没有看出hal_spi_abort()有在哪里对接收缓冲的数据进行清除。从程序逻辑上看,我倒是有
点怀疑第一次调用这个回调函数时并不是接收到收据了,或许是发送完成了,此时若将DMA放弃调,后面自然没法进行数据的接收了,这个
地方好好做下代码确认。
butterflyspring 回答时间:2022-1-14 11:30:07
我个人觉得应该用HAL_SPI_DMAStop(&hspi1); 这个函数更合适一点吧。 另外楼主可以试试降低SPI 通讯速率或者增加发送接收数据的个数试试,如果代码执行速度跟不上SPI的速度也可能会出逻辑问题。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版