STM32F4程序运行稳定,但JLINK调试频繁复位故障

在使用STM32F4芯片进行程序开发时,开发者遇到更换OLED后程序不定时复位的问题。通过排查,排除了任务延时、数组边界和数据类型等常见错误。通过在显示任务中添加计数器变量进行故障定位,发现程序可能在特定循环语句中停滞。修改该循环条件后,程序运行45分钟未出现复位,问题初步解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主板芯片为stm32f4系列,由于换了OLED,所有相关程序重写。

主要程序写好,下载到MCU里运行也正常,但在调试时发现不定时复位。

1 查看任务延时,基本没问题。

2 仔细检查数组边界及数据类型问题,也没发现有问题。

3 把看门狗屏蔽,在线调试运行后发现程序死在显示任务中。

即RTX任务调试窗口显示显示任务一直运行,下一个任务一直等待。

 为了进一步缩小错误范围,在显示任务中建立7个u32全局变量

static uint32_t DRCORDNUM0=0,

                       DRCORDNUM1=0,

                       DRCORDNUM2=0,

                       DRCORDNUM3=0,

                       DRCORDNUM4=0,

                       DRCORDNUM5=0,

                       DRCORDNUM6=0;

在被测试任务程序中插入:

if(DRCORDNUM0>=10000000)DRCORDNUM0=0;
               else DRCORDNUM0++;

if(DRCORDNUM1>=10000000)DRCORDNUM1=0;
               else DRCORDNUM1++;

if(DRCORDNUM2>=10000000)DRCORDNUM2=0;
               else DRCORDNUM2++;

if(DRCORDNUM3>=10000000)DRCORDNUM3=0;
               else DRCORDNUM3++;

...............................................................................

if(DRCORDNUM6>=10000000)DRCORDNUM=0;
               else DRCORDNUM6++;

观察停止时各个变量数据,可以判断有问题语句大致位置。

最后查到程序基本死在此处:

while((SPI4->SR&SPI_SR_RXNE)==0){};   由于输出控制LED为单输出,所以没有输入。

这段语句很容易出问题。

改为:while(SPI4->SR&SPI_SR_BSY);

现在已经运行45分钟了,没停。希望没事。

顺便感谢 https://www.amobbs.com/thread-5614282-1-1.html

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值