我们有个产品使用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 进行断电复位才能恢复运行。 3. mcu 使用到了IAP功能,bootloader 地址0x8000000 地址开始,大小为0x4000,应用程序从0x8004000 地址开始,bootloader 程序跳转到app 程序的处理如下: app 程序 main 开头的处理如下: 后面针对固件工程进行分分析发现 启动文件中 STACK SIZE 是使用启动文件中的默认1KB的设置 即0x400, HEAP size 是0x200 查看 编译报告发现最大STACK 深度用到1128字节,已经超了1K,这应该是一个风险项,期间尝试修改为512字节 看看能否复现,很遗憾我已经蹲了了一个礼拜了,还没出现,这个bug 本来就难以复现,所以我也不笃定问题是不是就是STACK 设置太小导致的问题。 堆栈使用 以上 还请各位大佬分享下技术经验。 |
头文件找不到
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,跑的官方的例程一直读取失败,初学者,各位大佬能指点一下不
顶贴
这个是M3内核的程序吗,怎么还有协处理器指令CDP2
首先需要确定一下,不使用IAP的时候是否会死机
一步一步的分析一下吧,我觉得思路可以是这样的,你单独的写一个跳转到主程序的BOOT,这里面什么都不做,只是纯粹的跳转,从BOOT跳转到APP以后,先配置中断向量偏移量,然后不用管任何中断,只是开一个LED灯的初始化,你试几次看看行不行,如果这样跳转都有问题,那么就是芯片不行了,如果这样跳转没问题,那么有可能是你跳转的过程或者调到APP以后出了问题,ST刚发了一个帖子,有时间你看可以看一下,https://mp.weixin.qq.com/s/G-OxnX-0SippkTWNw_3iWA
发生故障时,楼主有没有监控复位脚上的信号,是否持续有复位信号发出。
如果监控了没有这个复位信号,那么楼主跟踪到的那个跳转 _main的或许是个过程一部分。 没
需要说明哈,这个我们已经稳定发货了,不是开发版本,如果这个是概率很大,不会到现在才发现这个问题
不太确定,版本一开始就有IAP,当然我可以进行没有IAP功能的情况下进行测试,感谢回复
[md]好的,非常感谢。