IT评测·应用市场-qidao123.com技术社区
标题:
【STM32】在FreeRTOS下利用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)
[打印本页]
作者:
大连密封材料
时间:
2025-4-16 14:33
标题:
【STM32】在FreeRTOS下利用硬件SPI收发数据出现的时序耦合问题(WK2124芯片为例)
问题
STM32中在Freertos利用SPI通讯芯片 WK2124进行SPI转4串口时,吸收数据为一个任务,发送数据为一个任务,切接受任务优先级更高实测发现收发一段时间(约几分钟)外扩芯片会死锁导致WK2124复位。
分析
首先,WK2124是一个SPI转多路UART的芯片,它的通信依赖于SPI总线。在FreeRTOS中,吸收和发送分别作为独立任务,这大概导致SPI资源的竞争。SPI外设在多任务环境下必要正确的同步机制,否则大概引发时序问题。
若高优先级任务(如吸收任务)频繁抢占SPI总线,而低优先级任务(如发送任务)未及时开释互斥量,大概导致死锁。所以存在类似这样的情况:在SPI发送操作时,还未发送完成就收到了吸收中断,若吸收任务优先级高于发送任务,那么SPI发送时序未完成就进入了吸收时序,导致两种时序稠浊在一起,从而导致芯片时序紊乱而复位。
所以,可以利用FreeRTOS中的互斥量(Mutex)来掩护共享资源,比如硬件外设。如果没有在SPI访问时加锁,两个任务大概同时操作SPI,导致时序杂乱。
解决办法
解决办法很简单,在SPI操作前后添加互斥锁,例如对发送操作和吸收操作做互斥量掩护,确保同一时间仅一个任务访问总线
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4