
我们有个产品使用STM32F103ZEH6,当前有概率出现工作不正常的现象,当前针对这个问题我们分析遇到困难,希望大家能指点下思路 简述下当前我们MCU应用的一些细节。 1. 使用jlink 获取工作不正常MCU 内部寄存器信息如下: PC = 08005D96, CycleCnt = 01DB4F96 R0 = 40021000, R1 = 40D6A0C0, R2 = 00000031, R3 = 08001939 R4 = 00000001, R5 = 0000006B, R6 = 00000000, R7 = 08001465 R8 = 0000E598, R9 = 20000B4C, R10= 00000000, R11= 00000005 R12= 00000000 SP(R13)= 20004A60, MSP= 20004A60, PSP= 20001F68, R14(LR) = 08004149 XPSR = 01000000: APSR = nzcvq, EPSR = 01000000, IPSR = 000 (NoException) CFBP = 00000001, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 01 FPU regs: FPU not enabled / not implemented on connected CPU. J-Link> 根据R14 寄存器的值0x08004149,定位到一直停留在应用程序区的复位向量的__main 函数,发生这个故障时,需要对MCU 进行断电复位才能恢复运行。 ![]() 2. mcu 使用到了IAP功能,bootloader 地址0x8000000 地址开始,大小为0x4000,应用程序从0x8004000*地址开始,bootloader 程序跳转到app 程序的处理如下: ![]() app 程序 main 开头的处理如下: ![]() 3. 固件中有启用窗口看门狗 后面怀疑堆栈开辟太小导致MCU 跑飞工作不正常,于是查看了map 文件 及build 文件 发现堆栈深度最大用到了1128字节,我的工程堆栈没有手动修改过,保持了stack 0x400(1KB) heap 0x200 的默认设置,。 由于此bug 复现概率不高,很难找到复现路径。当前我无法判定MCU 工作是否是堆栈开辟调小导致的(实际我将堆栈改成512字节也能正常运行)。 先咨询下大家有遇到跟我类似的bug 场景吗? |
几点提醒:1、我看你开启了窗口狗,有无可能是喂狗方面的问题呢?2、你在跳转前,能否对在boot区开启的中断使能都以个个关闭掉而不是简单地关闭总中断?3、APP区的矢量表的给定能否在APP的启动文件里完成而不是到用户main里才来做。 |
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
stm32cubemx F103芯片tim3 encoder模式pc6和pc7引脚,自动生成代码缺少gpio映射。
stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗