这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 如何拯救烧错固件的单片机?

共6条 1/1 1 跳转至

如何拯救烧错固件的单片机?

高工
2021-04-25 16:54:43     打赏

你是否有过烧错固件的经历?

STM32F1xx 程序意外烧录到 STM32F4xx 单片机中,或者外部晶振 25M,程序设定为 8 M后再烧录到单片机中?

这样就造成了一个后果,那就是再也无法使用调试器连接你的单片机了。

此时,是否有方法解决这个问题,或者说拯救你的单片机呢?

在此介绍两种方法:

1、进入固件升级 BOOTLOAD 状态。

此时单片机将使用内部高速晶振 HSI 运行 BOOTLOAD 代码(即参考手册写的所谓 自举程序),此时的单片机肯定可以正常运行,当然也就可以通过调试器连接单片机了。

2、使用复位引脚。

我们知道,STM32单片机的第一条指令执行位置就在复位中断,并且单片机无法屏蔽该中断,也就是说,无论单片机处于何种状态,它都会在复位信号到来时复位到最开始的状态,并重新开始执行代码。

所以如果我们能在它执行错误时钟配置代码前,利用调试器把没问题的代码下载进去,那么程序就可以正确配置时钟了,从而正常运行代码了。

我们可以看看这个执行流程:

上电或复位 ->进入复位中断执行 ->配置时钟信息(SystemInit)->运行 __main。

在配置时钟前,调试器是可以连接单片机的,所以,如果我们能抢在它之前,先用 KEIL将正确的程序下载进去(必须是正确的代码,否则又会连接不上,陷入死循环),那就能让单片机恢复到正常状态了。

另一种方法是,使用 KEIL软件的擦除功能,先将单片机的程序擦除,这样单片机就没有错误的代码可以执行了,当然前提还是使用复位信号。

image.png

但这种擦除方法,成功率比较低,毕竟从复位到执行时钟配置代码这段时间实在是太短了,要刚好凑在这个时间点击Erase按钮还是需要一定运气的。

一种更高效的方式是:直接使用下载按钮,即复位后,马上点击下载正确的代码。

image.png

为什么这个比较高效呢,猜测一下,应该是这个命令会尝试多次下载,这样成功率就会高很多,毕竟是软件的重复尝试,比手动掐时间快得多。

还有一个问题是,为什么晶振配置错误会导致单片机无法连接呢?

根据上面的错误配置,很大可能是使单片机处于超频运行,导致单片机挂掉了。


image.png

转贴自网络



院士
2021-04-26 08:51:17     打赏
2楼

正常jlink插进去在烧一边就好了


工程师
2021-05-04 23:05:23     打赏
3楼

感谢分享


工程师
2021-05-05 22:28:52     打赏
4楼

只要MCU没有烧断“熔丝”之类,都可以重新烧录~


工程师
2021-05-05 22:34:23     打赏
5楼

OTP 看你如何重新烧录固件!


工程师
2021-05-05 22:40:17     打赏
6楼

前段时间碰到一个异常 (硬件WATDOG打开,然后赋值为0)就是这样的操作,导致HK32就报废了。。。 因为下载器还没来得及操作SWD接口,MCU又复位了,这样如何才能更新固件啊?


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]