SPI传输时为何丢失2个数据?
来源:茶话MCU 发布时间:2024-06-13 分享至微信
有人使用STM32F4芯片验证SPI功能。当使用片内两个SPI模块基于中断方式进行收发时,发现总是出现接收数据丢失的情况,貌似总丢失末尾2个数据。代码使用HAL库提供的API函数。这是怎么回事呢?
我拿STM32F407开发板进行验证测试。使用SPI1做发送,SPI3做接收,都使用中断方式。
很快重现了问题现象,即发生接收数据丢失的情形。见下图验证结果,发了8个数据,只收到6个数据。
现在是同一颗芯片,即同一CPU基于中断方式完成收发。怀疑会不会是不同SPI收发模块中断优先级的安排不合理导致的问题。如果二者优先级一样的话,这里的发送中断往往先于接收中断的产生,势必会出现接收不及时的情形。通过对代码跟踪调试,也的确发现了SPI接收溢出的现象,即接收数据提取不及时。
这样分析下来,感觉数据丢失应该跟通信速率有关,丢失数据的多少不应该固定。于是,我大幅度提升SPI通信速率再行测试,果真丢失的数据更多了。见下图测试结果,发8个数据只收到1个数据。【前面测试时SPI波特率是5.25Mb/s,现在改为21Mb/s了】
我将SPI3接收中断的优先级调得比SPI1发送中断的还高,如下图所示。
基于重新调整中断优先级后的代码再做测试,结果就完全正常了。
当然,我们还可以有其它灵活处理的办法。比方发送用中断,接收用DMA,或者发送用轮训,接收用中断或DMA,或者都用DMA方式也行。
这里的核心问题是中断优先级没有合理安排好。STM32ARM核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。
~~~~~~~~~~~~~~~~~~~~~~~~~
[ 新闻来源:茶话MCU,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论
暂无评论哦,快来评论一下吧!
茶话MCU
MCU 相关信息分享与交流。
查看更多
相关文章
CoreWeave宣布将在英国新建两个数据中心
2024-05-13
为何实现不了定时器DMA Burst传输?
2024-06-13
Brickcom推出InstantFind,革新物联网数据传输
2024-06-04
使用CubeMx配置NVIC时为何不见子优先级?
2024-06-13
关于STM32 DMA传输的两个问题释疑
2024-06-13
热门搜索