我们有个产品使用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里才来做。 |
stm32进入stop模式被莫名其妙唤醒(应该是systick)但是无法被WKUP引脚唤醒。
头文件找不到
软件为keil5,头文件未找到
通过FATFS文件系统读写SD卡创建文件可以了,但加入MSC,一直显示一个没有格式化的U盘盘符,也不能格式化,这是什么问题导致的
stm32f103汇编求助
cubemx 生成的freertos代码 在keil ac6下不能编译,有什么解决的方法吗
报错Could not determine GDB version using command: arm-none-eabi-gdb --version
stm32f107vct6配RTL8201例程
STM32F103VGT6 能代替 STM32F103VFT6 吗?
STM32 读取DHT20,跑的官方的例程一直读取失败,初学者,各位大佬能指点一下不