STM32下载一次程序后就无法再次下载,程序无法运行。

博主在使用Jlink下载STM32程序后遇到无法再次下载和运行的问题。尝试了修改BOOT0管脚和使用ST-linkUtility进行擦除,但问题仍未解决。最终发现原因是25MHz晶振与官方固件中的8MHz晶振配置不匹配。通过修改STM32官方固件中的晶振参数成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

由于在实验室中新接手了一个项目,需要在原有的硬件基础上重新写程序,于是开始用原来的主控板,但是在使用过程中发现用Jlink下载一次程序后就无法读到芯片,也无法下载程序,芯片也停止运行程序了,经过一天的折腾,终于完美解决了这个问题,所以将该问题记录下来,提供给各位参考。

1.现象

使用J-link下载完一次程序后无法再次下载程序,芯片停止运行。
在这里插入图片描述

2.各种解决办法

2.1 解决办法一. 修改BOOT0管脚

在网上找了大量的资料后发现有些帖子说可能是芯片的SWCLK和SWDIO管脚的状态被更改了。
一般芯片的SWCLK和SWDIO管脚都是连接一个10k的电阻接地,来实现FLASH启动。
解决办法是:
1.将BOOT0拉高
2. 按手动复位按键
3.将BOOT0在接地

我这样操作过后发现一样也读不到程序,但是在BOOT0拉高时可以读到芯片,但下载不了程序进去。

2.2 解决办法二. 采用ST-link Utility

采用ST-link Utility来擦除芯片里的程序,链接:

https://blog.youkuaiyun.com/weixin_49805374/article/details/116604048?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242

在这里插入图片描述

但是在操作过程中发现,芯片根本无法连接到 ST-link Utility,在多次尝试后发现在连接芯片的过程中需要按下复位键就可以连接芯片,在擦除芯片的数据的过程中也需要按键复位件,然后惊奇的发现使用Jlink可以读到芯片数据,并且可以下载进去程序, 我以为问题就这样解决了,但是 后面发现 程序只可以下载进去一次,并且程序下载进去后无法运行, 而且无法进入硬件仿真,只有在按下复位键后才能进入仿真,并且程序在运行到systikclock()后就卡死了,于是我怀疑时晶振的问题,经过检查发现原来板子上焊的是25M晶振。

3.真正的解决办法

问题的原因是板子上焊的是25M晶振,而STM32官方固件里是8M的晶振,所以在stm32的官方固件中修改过来就好了。

3.1修改STM32官方固件中的晶振参数

3.1.1 在stm32f4xx.h中 将 HSE_VALUE的参数修改为 25000000

在这里插入图片描述

3.1.2 在system_stm32f4xx.c中的第316行的PLL_M修改为25

在这里插入图片描述
于是这样就完美解决了这个问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会武功不懂江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值