我们有个产品使用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里才来做。 |
No source available for "uwTickPrio0 at 0x20000004
stm32输入捕获模式下,TIM_ICFilter的值选择不解,盼求解
我想找STM32网口的设计方案
使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
STM32F103在用stm32cubeide编程,用stlink烧录调试的时候
STM32 HID和CDC组合设备无法枚举成功
Failed to execute MI command
确认STM32F103C8T6_UFQPN48
stm32f103rbt6使用stm32cubemx配置pwm无输出
设备进行老化测试,长期运行后程序卡死,为什么看门狗不能让他复位重启呢?