STM32 DEBUG会进入0x1fffxxxx处循环

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:03   1921   0

先介绍一下这个问题出现的背景:

有一个项目需要外接一个I2C驱动的温湿度传感器,使用了STM32的I2C1_SCL和I2C1_DAT以及电源。使用外部的GND。

进行的测试是一个较为暴力的测试,内含看门狗复位。为了测试在极端环境下是否会跑飞回不来。


确实出现了跑飞回不来的情况了。而且按了reset按键也不起作用,只有重上电才能恢复。

使用keil debug能发现跑飞之后程序是在0x1fffxxxx内循环,根本不是我程序存储的0x08000000位置。所以就觉得可能是复位了,但是复位的起始位置指错了。根据BOOT的配置可以看出来BOOT1为0,BOOT0为1的时候会从系统存储器启动,即为0x1ffffxxxx所在空间。

所以查看原理图可以看出BOOT0和温湿度传感器挨着,所以破案了,一定是焊接原因。

至于为什么刚上电的时候是正常从flash启动的,我个人分析是由于上电的时候温湿度传感器还没驱动起来,依旧是低电平。而在程序开始执行之后,I2C空闲状态就变成高点平了,这个时候复位就BOOT0就会是1。

焊接问题是个不容易注意的小问题,但是现象确实很诡异


20191031更新:

和公司同事讨论了一下,发现关于刚上电的时候能正常执行程序我的想法是错误的。

因为I2C上电的时候会自动上拉,而且温湿度模块的电源和地也都是接在MCU上,相当于MCU和温湿度模块是同时上电。

而查阅芯片手册可以得知,BOOT会在reset后的第四个上升沿去采值

所以之前认为的不合逻辑,但是这又解释不通为什么刚上电的时候好用,但是执行过程中复位才不正常的现象。

只能姑且认为是测试样本不够多,接触不良偶然事件了。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP