【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操作前后添加互斥锁,例如对发送操作和接收操作做互斥量保护,确保同一时间仅一个任务访问总线

相关推荐
不悔哥1 天前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
XiHongShi20161 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
优信电子1 天前
AIT1001 非接触式红外测温模块 STM32 驱动开发实战:从引脚到代码全解析
stm32·嵌入式·温度传感器·红外测温·非接触式测温·ait1001
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
wuyk5551 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
女神下凡1 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
梅梅9661 天前
一款mipi转lvds的lcd调试(LT8912B)
单片机·计算机外设·电脑·显示器·pd芯片
开发笔记-阿牛1 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅1 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员1 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程