有人使用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核中断的内容不多,不过内容不多的东西往往意味着使用上更为灵活。好,今天的话题就分享到这里。
上一篇:请问一下STM32管脚重映射支持任意组合吗?
下一篇:STM32F0系列MCU硬件电路供电设计
推荐阅读最新更新时间:2024-11-16 21:21
设计资源 培训 开发板 精华推荐
- VM801P50A-BK,FT801 显示系统的嵌入式视频引擎 Plus 开发模块,ATMEG328P,5V/16MHz,Micro-SD 插座,5.0 - 480x272 分辨率 TFT LCD,带电容式触摸屏,黑色外壳
- 使用 ROHM Semiconductor 的 BU4219 的参考设计
- X-NUCLEO-IKS01A3,用于 STM32 Nucleo 的运动 MEMS 和环境传感器扩展板
- 具有 6uA 反向泄漏电流的 LT1767EMS8-5 双源电源的典型应用电路
- LTC2862AMPS8-1 故障安全 0 应用的典型应用(空闲状态 = 逻辑 0)
- F4飞控
- 具有 250ksps 16 位 LTC2376-16 SAR ADC、LTC6655-5 的 LTC6362 演示板
- LTC3882 的典型应用——具有数字电源系统管理功能的双路输出多相降压型 DC/DC 电压模式控制器
- 甘草酸不酸墨水屏阅读器,适配4.2寸墨水屏
- LTC3832EGN/-1ES8 演示板、高效降压电源、3.1V 至 8V 输入、2.5/1.8/1.5Vout @ 12A
- e络盟邀您齐聚2023慕尼黑电子展,三重好礼等你拿!
- 【DIY数控电源】入围方案及后续活动安排!
- 有奖问答|ADI技术直通车——电化学传感测量与气体检测
- 追更有惊喜:解救被FSM折磨过的你,justd0解析LSM6DSOX有限状态机官方例程
- “USB 3.1 规范及重要测试需考虑的因素”江湖令,一起在吐槽中成长
- TI 嵌入式处理器最新产品发布会 全程在线直播 4月16日精彩为您呈现!预报名、看直播、享好礼
- 跟 TI工程师 立下你的金猪Flag!立Flag & 分享赢双重好礼!
- 【投票瓜分2500元红包】2022得捷电子创新设计大赛优秀作品人气奖由你来定!
- Littelfuse【智能家居的电路保护方案】在线研讨会 11月22日10点 强势登场!预报名、参与研讨会赢好礼!
- 泰克MDO系列:1招搞定6大仪器,轻松穿越模拟、数字、频域测量