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

相关推荐
azwsm7 小时前
驱动第一阶段——启动流程
单片机·嵌入式硬件
单片机杂货铺9 小时前
基于单片机的自动开窗器设计
stm32·嵌入式硬件·51单片机·硬件工程
天天爱吃肉821810 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
别催小唐敲代码10 小时前
STM32 I2C协议详解:从原理到实战
stm32·网络协议·协议
lhbweilai11 小时前
STM32 I2C(hal库)
stm32·单片机·嵌入式硬件
单片机杂货铺14 小时前
基于STM32的智能市政清洁小车系统设计
stm32·单片机·嵌入式硬件·物联网·硬件工程
单片机杂货铺14 小时前
基于STM32的智能书房系统的设计
stm32·单片机·嵌入式硬件·51单片机·硬件工程
&Hello Code15 小时前
3.解决STM32工程混乱:一套可复用六层架构,GPIO 、LED 实战演示
stm32·嵌入式硬件·架构
普科PRBTEK15 小时前
电流探头的常见应用场景
单片机·嵌入式硬件
qq_4017004115 小时前
3个常用的单片机实现隔离控制大电流负载例子
单片机·嵌入式硬件