STM32H743跑RTOS跑着跑着就死机,有没有大佬遇到过

STM32 · 马超 · 8 浏览
板子是自己画的,STM32H743VIT6,跑FreeRTOS,5个任务,串口屏刷新+ADC采样+Modbus从站+以太网+一个LED心跳。现象是运行几个小时到十几个小时不等,突然全挂,心跳灯不闪了,串口也没输出,看门狗没复位(说明喂狗任务还在跑?还是狗本身没配好我也没底)。产线上3台设备都这毛病,客户催得急,头大。 已经排查的:电源纹波看过,3.3V还算干净;堆栈watermark查了都有余量;HardFault进过一次,LR和PC抓出来指向以太网中断附近,但复现太难。怀疑过ETH DMA描述符和RTOS临界区打架,也怀疑过ADC+DMA和Cache一致性问题,H7这Cache真是坑。MPU配置按手册配的,D-Cache开了。 有没有跑H7+RTOS+以太网的老哥指点下方向?尤其是Cache和DMA这块的坑。直接看手册最快这话我信,但手册翻烂了没定位到,先谢过各位。

回答(1)

★ 精华
老哥这现象很像HardFault后没进狗咬,先确认狗是不是喂在中断里——喂狗任务优先级低的话,挂了也照喂。重点查两个:一是H7的Cache,ETH和ADC的DMA描述符、缓冲区记得走MPU配成Non-Cacheable或用SCB_CleanInvalidateDCache_by_Addr,不然DMA写内存CPU读到脏数据,跑久了就崩;二是以太网中断里的临界区,别在ISR里调FreeRTOS带阻塞的API,用FromISR版本,中断优先级数值要≥configMAX_SYSCALL_INTERRUPT_PRIORITY。HardFault的LR/PC指向ETH附近基本实锤。建议先开SCB->CFSR和HFSR打印到备份RAM,复位后读出来,比瞎猜快。
蒋琴 · 2026-11-04