有人使用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核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。
大视频时代下CDN相关的视频行业发展趋势
深圳公共场所电梯进行维保需要什么条件
Windows操作系统源码已被打包成种子或者基于网盘进行疯狂传播?
iPhone12系列为何不如iPhone11受欢迎?
EMFM污水流量计的安装注意事项
使用STM32F4芯片验证SPI功能的问题分析
DTU与RTU有什么不同?
工信部关于印发《工业互联网网络建设及推广指南》的通知
尽管iOS11已公布,苹果继续推iOS10.3.3 beta4测试版,iOS11 Beta未出就成功破解iOS10.3.2也越狱成功?
9kw380v用多大的电缆 如何选择优质电缆
关于微功率无线模块测试方案的分析和介绍
LED灯闭环强度控制和MLX10803 LED驱动器的原理图
采用变频器实现皮带称重给料系统的设计
年轻人买冰箱选海尔?看看最新展出的黑科技
明年配备AMOLED面板的智能手机销量会超6亿部
状态机的三种实现模式(C语言实现状态机的三种方法)
高速串行传输兼容设计的设计准则
魅族pro7plus评测 无愧旗舰之名
vivo X27 Pro将搭载透明光效升降式摄像头并支持八色氛围灯
Redmi Note9 4G新版本上线京东商城