请选择 进入手机版 | 继续访问电脑版

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

STM32F103 死机问题

[复制链接]
armlink 提问时间:2022-4-9 14:54 / 未解决
我们有个产品使用STM32F103ZEH6,当前有概率出现工作不正常的现象,表现就是整个MCU不工作了,当前针对这个问题我们分析遇到困难,简述下当前我们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>
2.根据R14 寄存器的值0x08004149,定位到一直停留在应用程序区的复位向量的__main 函数,发生这个故障时,需要对MCU 进行断电复位才能恢复运行。 f1.png
3. mcu 使用到了IAP功能,bootloader 地址0x8000000 地址开始,大小为0x4000,应用程序从0x8004000 地址开始,bootloader 程序跳转到app 程序的处理如下:
f2.png

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

f3.png
后面针对固件工程进行分分析发现 启动文件中 STACK SIZE 是使用启动文件中的默认1KB的设置 即0x400, HEAP size 是0x200
查看 编译报告发现最大STACK 深度用到1128字节,已经超了1K,这应该是一个风险项,期间尝试修改为512字节 看看能否复现,很遗憾我已经蹲了了一个礼拜了,还没出现,这个bug 本来就难以复现,所以我也不笃定问题是不是就是STACK 设置太小导致的问题。

堆栈使用

堆栈使用

以上 还请各位大佬分享下技术经验。

收藏 评论8 发布时间:2022-4-9 14:54

举报

8个回答
armlink 回答时间:2022-4-9 14:56:24

顶贴

f1.png
f2.png
f3.png
f4.PNG
onebyte 回答时间:2022-4-9 17:32:00

这个是M3内核的程序吗,怎么还有协处理器指令CDP2

Ankky 回答时间:2022-4-12 09:04:42

首先需要确定一下,不使用IAP的时候是否会死机

1+1=2 回答时间:2022-4-14 08:41:37

一步一步的分析一下吧,我觉得思路可以是这样的,你单独的写一个跳转到主程序的BOOT,这里面什么都不做,只是纯粹的跳转,从BOOT跳转到APP以后,先配置中断向量偏移量,然后不用管任何中断,只是开一个LED灯的初始化,你试几次看看行不行,如果这样跳转都有问题,那么就是芯片不行了,如果这样跳转没问题,那么有可能是你跳转的过程或者调到APP以后出了问题,ST刚发了一个帖子,有时间你看可以看一下,https://mp.weixin.qq.com/s/G-OxnX-0SippkTWNw_3iWA

butterflyspring 回答时间:2022-4-14 10:07:59

发生故障时,楼主有没有监控复位脚上的信号,是否持续有复位信号发出。

如果监控了没有这个复位信号,那么楼主跟踪到的那个跳转 _main的或许是个过程一部分。 没

armlink 回答时间:2022-4-18 14:28:17

Ankky 发表于 2022-4-12 09:04
首先需要确定一下,不使用IAP的时候是否会死机

需要说明哈,这个我们已经稳定发货了,不是开发版本,如果这个是概率很大,不会到现在才发现这个问题

armlink 回答时间:2022-4-18 14:29:14

Ankky 发表于 2022-4-12 09:04
首先需要确定一下,不使用IAP的时候是否会死机

不太确定,版本一开始就有IAP,当然我可以进行没有IAP功能的情况下进行测试,感谢回复

armlink 回答时间:2022-4-18 14:33:01

1+1=2 发表于 2022-4-14 08:41
一步一步的分析一下吧,我觉得思路可以是这样的,你单独的写一个跳转到主程序的BOOT,这里面什么都不做 ...

[md]好的,非常感谢。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版