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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版