stm32单片机进入低功耗后无法烧录程序

利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键,点下载,然后松开复位键即可。

我遇到的问题是:误入了stm32(STM32L051C6T6)的STOP模式,又没有写入相应的唤醒方法,导致后续的程序不能下载。使用MDK5 点击load时总会出现No target connected。自己设计的最小系统又没有加入复位键。。。

有以下几种解决办法:

1、可以将单片机的NRST引脚引出来,外接复位键。(关于引脚查看可用ST官方软件STM32cubeMX,很方便)

2、通过ISP的方式下载程序,必须将boot0接高电平,boot1(PB2)接低电平,然后必须断电后重启,此时单片机会进入ISP模式,就可以通过串口1(一般单片机都是只有串口1才可下载程序)再用flymcu等软件烧入hex文件就可以了。

关于boot0和boot1,在每个stm32单片机都会有这两个引脚,这两个引脚在复位时的电平状态决定了芯片在复位后从哪个区域开始执行程序。

boot1=x boot0=0从用户闪存启动,这是正常的工作模式。

boot1=0 boot0=1从系统存储器启动(进入ISP模式)。

boot1=1 boot0=1从内置SRAM启动,这种模式可以用于调试。

如此一来,单片机无法进入正常的工作模式,就无法进行休眠,就可以通过ISP来下载程序。

3、使用STlink烧写程序,STlink至少要接4根线(SWDIO、SWCLK、GND、SW-RST),一般的下载程序只需要前三根就可以了,但是以防出现休眠无法唤醒的情况,这时有复位键就可以将SWDIO和SWCLK重置,如果板子设计没有与SW-RST相对应的,此时需要把单片机上的NRST引出来接到SW-RST上。下载程序之前boot0接高电平,boot1不用管(也需要断电后重启)。

下载配置这里按如下配置,RESET那里HW RESET和SYSRESETREQ任选一个。

配置好之后load一个空程序即可,不要再烧一个休眠的程序了,之后就可以正常烧程序了。

总结:由于板子设计等原因,使用的是第三个方法,前两个方法也都是可用的。

经过自己实测:

但是换成正版的ST-link/V2,还是四线(SWIO,SWCLK,3V3,GND)连接的话,就会出现No target connected的问题

看了其他资料:

将板子的3.3V电源连上正版ST-link/V2 的 TVCC引脚后,MDK成功识别到了芯片,原来TVCC是电源平衡输入引脚,但不能作为MCU的供电引脚,可以正确识别到了芯片。

 

### 单片机上电后进入低功耗模式导致无法烧录的问题解决方案 #### 进入低功耗模式前的准备 为了防止单片机在上电后立即进入低功耗模式而导致无法正常烧录程序,在设计阶段应考虑如何延迟进入低功耗模式的时间窗口。可以通过软件设置延时函数来实现这一目标,确保有足够的初始化时间完成编程操作。 对于STM32系列微控制器而言,可以利用其内置看门狗定时器(Watchdog Timer),通过适当配置使其定期唤醒MCU从而避免长时间停留在深度睡眠状态影响调试工具连接[^1]。 ```c // 设置看门狗超时时间为较短周期, 防止单片机过早进入深睡模式 void setup_watchdog(void){ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_32); // Prescaler value of 32 IWDG_SetReload(0xFFF); // Reload counter to max (4095) IWDG_ReloadCounter(); } ``` #### GPIO与外设配置调整 针对某些特定型号如GD32L23X,在低功耗状态下部分I/O端口会自动切换至上拉输入模式,这可能干扰正常的通信接口工作。因此建议在外设初始化之前先对外部设备进行合理的电源管理规划;必要时可关闭不必要的模块供电或将它们置于更低能耗等级的工作方式之下[^2]。 另外还需注意的是,如果使用USART串行通讯作为下载途径,则需保证该通道始终维持活跃状态直到固件更新过程结束为止。可通过禁用相应UART线路上的自动休眠特性达成此目的[^3]。 #### 调试接口保留 最后也是最重要的一点是在应用程序代码里预留足够的余量给JTAG/SWD等硬件调试接口留有充分的操作空间。具体做法包括但不限于: - 不要轻易改变SWDIO(SWD Data Input Output) 和 SWCLK(Serial Wire Clock Line)两个引脚的功能定义; - 尽量减少对这些信号线上附加负载的影响; - 如果确实需要重新映射上述两根线路的位置,请务必确认新选位置不会与其他重要功能冲突。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值