单片机学习小组
登录
直播中
吴湛
9年用户
926经验值
擅长:可编程逻辑
私信
关注
请问如何拯救烧错固件的单片机?
开启该帖子的消息推送
单片机
嵌入式
人工智能
软件测试
请问如何拯救烧错固件的
单片机
?
回帖
(1)
杨明
2022-2-10 14:40:08
你是否有过烧错固件的经历?
STM32F1xx 程序意外烧录到 STM32F4xx 单片机中,或者外部晶振 25M,程序设定为 8 M后再烧录到单片机中
这样就造成了一个后果,那就是再也无法使用调试器连接你的单片机了。
此时,是否有方法解决这个问题,或者说拯救你的单片机呢?
鱼鹰在此介绍两种方法:
1、进入固件升级 BOOTLOAD 状态。
此时单片机将使用内部高速晶振 HSI 运行 BOOTLOAD 代码(即参考手册写的所谓 自举程序),此时的单片机肯定可以正常运行,当然也就可以通过调试器连接单片机了。关于这个可以看鱼鹰写的两篇笔记《
如何拯救烧错固件的单片机?(一)
》《
Boot 引脚引发的血案
》
2、使用复位引脚。
我们知道,STM32单片机的第一条指令执行位置就在复位中断,并且单片机无法屏蔽该中断,也就是说,无论单片机处于何种状态,它都会在复位信号到来时复位到最开始的状态,并重新开始执行代码。
所以如果我们能在它执行错误时钟配置代码前,利用调试器把没问题的代码下载进去,那么程序就可以正确配置时钟了,从而正常运行代码了。
我们可以看看这个执行流程:
上电或复位 ->进入复位中断执行 ->配置时钟信息(SystemInit)->运行 __main。
在配置时钟前,调试器是可以连接单片机的,所以,如果我们能抢在它之前,先用 KEIL将正确的程序下载进去(必须是正确的代码,否则又会连接不上,陷入死循环),那就能让单片机恢复到正常状态了。
另一种方法是,使用 KEIL软件的擦除功能,先将单片机的程序擦除,这样单片机就没有错误的代码可以执行了,当然前提还是使用复位信号。
但这种擦除方法,鱼鹰发现成功率比较低,毕竟从复位到执行时钟配置代码这段时间实在是太短了,要刚好凑在这个时间点击Erase按钮还是需要一定运气的。
所以鱼鹰最近发现,一种更高效的方式是:直接使用下载按钮,即复位后,马上点击下载正确的代码。
为什么这个比较高效呢,根据鱼鹰的猜测,应该是这个命令会尝试多次下载,这样成功率就会高很多,毕竟是软件的重复尝试,比手动掐时间快得多。
还有一个问题是,为什么晶振配置错误会导致单片机无法连接呢?
根据上面的错误配置,很大可能是使单片机处于超频运行,导致单片机挂掉了。
鱼鹰试图解释时钟配置错误和调试模块的关系,但通过参考手册,并没有找到 CoreSight的时钟来源,只能以后看看能不能有机会解惑了。
而关于单片机和调试模块的关系,可以看看鱼鹰这篇笔记《
为什么说你一定要掌握 KEIL 调试方法?
》
你是否有过烧错固件的经历?
STM32F1xx 程序意外烧录到 STM32F4xx 单片机中,或者外部晶振 25M,程序设定为 8 M后再烧录到单片机中
这样就造成了一个后果,那就是再也无法使用调试器连接你的单片机了。
此时,是否有方法解决这个问题,或者说拯救你的单片机呢?
鱼鹰在此介绍两种方法:
1、进入固件升级 BOOTLOAD 状态。
此时单片机将使用内部高速晶振 HSI 运行 BOOTLOAD 代码(即参考手册写的所谓 自举程序),此时的单片机肯定可以正常运行,当然也就可以通过调试器连接单片机了。关于这个可以看鱼鹰写的两篇笔记《
如何拯救烧错固件的单片机?(一)
》《
Boot 引脚引发的血案
》
2、使用复位引脚。
我们知道,STM32单片机的第一条指令执行位置就在复位中断,并且单片机无法屏蔽该中断,也就是说,无论单片机处于何种状态,它都会在复位信号到来时复位到最开始的状态,并重新开始执行代码。
所以如果我们能在它执行错误时钟配置代码前,利用调试器把没问题的代码下载进去,那么程序就可以正确配置时钟了,从而正常运行代码了。
我们可以看看这个执行流程:
上电或复位 ->进入复位中断执行 ->配置时钟信息(SystemInit)->运行 __main。
在配置时钟前,调试器是可以连接单片机的,所以,如果我们能抢在它之前,先用 KEIL将正确的程序下载进去(必须是正确的代码,否则又会连接不上,陷入死循环),那就能让单片机恢复到正常状态了。
另一种方法是,使用 KEIL软件的擦除功能,先将单片机的程序擦除,这样单片机就没有错误的代码可以执行了,当然前提还是使用复位信号。
但这种擦除方法,鱼鹰发现成功率比较低,毕竟从复位到执行时钟配置代码这段时间实在是太短了,要刚好凑在这个时间点击Erase按钮还是需要一定运气的。
所以鱼鹰最近发现,一种更高效的方式是:直接使用下载按钮,即复位后,马上点击下载正确的代码。
为什么这个比较高效呢,根据鱼鹰的猜测,应该是这个命令会尝试多次下载,这样成功率就会高很多,毕竟是软件的重复尝试,比手动掐时间快得多。
还有一个问题是,为什么晶振配置错误会导致单片机无法连接呢?
根据上面的错误配置,很大可能是使单片机处于超频运行,导致单片机挂掉了。
鱼鹰试图解释时钟配置错误和调试模块的关系,但通过参考手册,并没有找到 CoreSight的时钟来源,只能以后看看能不能有机会解惑了。
而关于单片机和调试模块的关系,可以看看鱼鹰这篇笔记《
为什么说你一定要掌握 KEIL 调试方法?
》
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
嵌入式
人工智能
软件测试
单片机
烧
错
固件
怎么解决?
2022-01-18
453
设计手机终端控制
单片机
2017-03-03
4808
单片机
烧
写是什么?有哪几种方式?
2021-04-01
1177
单片机
固件
问题
2019-06-02
2060
单片机
可以接cmos电平的元件吗?会
烧
单片机
吗?
2023-10-07
419
关于
单片机
程序
烧
写的问题
2012-04-09
3152
请高手指点,如何实现51
单片机
程序
烧
写
2014-05-16
3822
单片机
输入引脚电压过高
2014-08-13
10367
一个激光器驱动电路里
烧
完程序
单片机
就不工作了
2015-08-12
3250
怎样为
单片机
去
烧
写程序?
2021-07-22
2607
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分