你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103死机问题

[复制链接]
armlink 提问时间:2022-4-8 10:58 / 未解决
我们有个产品使用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 进行断电复位才能恢复运行。


f1.png

2. mcu 使用到了IAP功能,bootloader 地址0x8000000 地址开始,大小为0x4000,应用程序从0x8004000*地址开始,bootloader 程序跳转到app 程序的处理如下:
f2.png

app 程序 main 开头的处理如下: f3.png

3. 固件中有启用窗口看门狗
后面怀疑堆栈开辟太小导致MCU 跑飞工作不正常,于是查看了map 文件 及build 文件 发现堆栈深度最大用到了1128字节,我的工程堆栈没有手动修改过,保持了stack 0x400(1KB) heap 0x200 的默认设置,。

由于此bug 复现概率不高,很难找到复现路径。当前我无法判定MCU 工作是否是堆栈开辟调小导致的(实际我将堆栈改成512字节也能正常运行)。

先咨询下大家有遇到跟我类似的bug 场景吗?


收藏 评论1 发布时间:2022-4-8 10:58

举报

1个回答
xmshao 回答时间:2022-4-11 17:30:12
几点提醒:1、我看你开启了窗口狗,有无可能是喂狗方面的问题呢?2、你在跳转前,能否对在boot区开启的中断使能都以个个关闭掉而不是简单地关闭总中断?3、APP区的矢量表的给定能否在APP的启动文件里完成而不是到用户main里才来做。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版