为什么SWD烧录STM32时BOOT0脚要接高电平,否则SWD下载失败

之前网上买了个STM32的最小系统开发板,由于最近换了笔记本,为了测试重新搭建的开发环境是否能用,用st-link v2烧写这块开发板,发现居然提示

Reason: (4) No device found on target.

把板子侧的管脚定义,st-link侧的管脚定义,连接杜邦线的连通性都测了,居然还是不行,见鬼了。。。

上网查了下,有人说到买的一个开发板有类似的情况,客服让他把BOOT0短接3.3V,再烧写就可以工作了。嗯?BOOT0短接3.3V不是用于串口下载么,SWD按理说可以无视BOOT0配置,这是什么思路。测试了以下,居然还真的好用了,而且之后再用SWD烧录,无需再短接3.3V和BOOT0。

好奇心被成功勾起,再次网上搜索,直到发现有人说了这样一段话(特意把作者论坛id截图了,以示敬意)
OK,这个应该就是正解了。板子里烧的是出厂程序,我买了后没有新烧录(懒。。。买了有一年多。。。一直没用。。。)。原来的程序不知道是什么样的,但是猜测应该是把SWD调试接口禁用了,这样SWD的引脚就可以用作普通GPIO使用,这样下载完第一次程序后,如果从flash启动(BOOT0==0)则无法继续使用SWD接口重新下载程序或者调试,BOOT0拉高,可以让STM32从RAM启动,这样就可以重新使用SWD下载程序。后面由于我下载的程序里使能了SWD接口,所以不用BOOT0拉高也可以烧写。

OK,用CubeIDE测试一下猜测,禁掉SWD接口,烧录,再次烧录,复现了之前的问题,猜测正确。

更坑的一点是,现在CubeMX默认是把SWD调试关闭的(No Debug),这就导致如果没注意这一点,烧进程序后,BOOT0拉低(STM32推荐的正常工作状态),SWD再次烧写就会失败。

### STM32 BOOT0高电平程序无法运行的原因 当 STM32BOOT0被拉高,设备会进入 bootloader 模式而不是正常的应用模式。在这种情况下,微控制器不会执行存储在内部闪存中的用户代码,而是尝试从特定的启动地址加载固件或通过外部口(如 USART 或 SWD收新固件进行更新[^1]。 #### 原因分析 BOOT0的状态决定了 STM32 启动的行为: - 当 BOOT0 设置为低电平地),芯片将从主 Flash 存储器中加载并运行用户的自定义程序。 - 如果 BOOT0 被设置为高电平,则系统切换到 System Memory Bootloader 模式,在这种状态下,默认的用户应用程序会被忽略而等待进一步指令来重新编程器件或者测试硬件功能。 因此,如果观察到在设置了 BOOT0=High之后没有任何预期行为发生,那是因为此并没有任何预设好的任务被执行——所有的操作都依赖于如何配置该状态下的引导过程以及是否有相应的通信链路建立起来用于下载新的镜像文件给 MCU 使用。 #### 解决方案 为了使您的项目能够按照计划运作下去而不受上述情况影响,请考虑采取以下措施之一: 1. **修改电路设计** 确保只有在需要更新固件的候才把 BOOT0 设定成 HIGH;其余间都应该保持 LOW 来让处理器可以顺利地跑起我们烧录进去的那个主要应用逻辑部分。 2. **利用跳线帽手动控制** 在开发板上增加一个可选开关组件使得开发者能够在必要刻轻松改变 BOOT0 的高低位设定以便调试或是刷新系统软件版本号等等用途。 3. **自动复位机制** 编一段初始化序列加入至现有源码里头去检测当前环境变量是否存在异常状况(比如检查是否处于错误的工作模式),一旦发现问题即刻触发看门狗定器强制重启装置回到常规路径上来继续往下走流程图里的下一步骤动作。 ```c // Example C Code snippet demonstrating automatic reset mechanism based on BOOT mode detection. if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)) { // Check if Internal Watchdog caused last reset HAL_NVIC_SystemReset(); // Perform a system level restart if true } ``` 以上方法可以帮助解决由于不当设置 BOOT0 导致的问题,并确保最终产品始终稳定可靠地服务于目标应用场景之中。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值