stm32单片机进入休眠(STOP)模式后无法下载程序等问题的解决

本文介绍了STM32单片机误入STOP模式且未设置唤醒机制时的三种解决方法:添加外部复位键、通过ISP模式下载程序及使用STlink烧录程序。这些方法适用于无法正常唤醒的STM32L051C6T6单片机。

利用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一个空程序即可,不要再烧一个休眠的程序了,之后就可以正常烧程序了。

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

### STM32单片机进入停机模式的配置方法 STM32单片机支持多种低功耗模式,其中**停机模式Stop Mode)**是一种常用的节能方式。在该模式下,系统时钟停止运行,但内部电压调节器仍然保持供电,从而保留寄存器和SRAM中的数据[^1]。 #### 进入停机模式的基本步骤 1. **使能电源管理时钟** 在使用低功耗模式前,需要先启用PWR模块的时钟: ```c __HAL_RCC_PWR_CLK_ENABLE(); // 使能PWR时钟 ``` 2. **配置低功耗模式参数** 使用`HAL_PWR_EnterSTOPMode()`函数进入停机模式,并指定电压调节器状态和进入模式的方式(WFI或WFE): ```c HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); ``` - `PWR_LOWPOWERREGULATOR_ON`:表示保持低功耗调节器开启,以维持SRAM和寄存器内容。 - `PWR_STOPENTRY_WFI`:通过等待中断(Wait For Interrupt)进入停机模式[^1]。 3. **唤醒后重新配置系统时钟** 停机模式唤醒后,由于系统时钟可能被关闭,因此需要重新配置主时钟: ```c ReSysClkConfig_STOP(); // 用户自定义的时钟恢复函数 ``` #### 不同芯片型号的休眠电流差异 需要注意的是,不同型号的STM32单片机在停机模式下的功耗有所不同。例如,STM32F103R8在停机模式下的实测电流约为11μA,而STM32F103RC则约为30μA。这种差异是由于芯片设计和制造工艺的不同所导致的,属于正常现象[^3]。 #### 唤醒源配置 STM32可以通过外部中断、RTC闹钟、USB唤醒线等作为停机模式唤醒源。通常使用WFI(Wait For Interrupt)方式进入停机模式,此时任何中断均可唤醒系统。若需使用事件触发唤醒(WFE),则需要提前配置相应的事件标志。 #### 示例代码片段 以下是一个完整的进入停机模式的示例: ```c void Enter_Stop_Mode(void) { __HAL_RCC_PWR_CLK_ENABLE(); // 使能PWR时钟 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后重新配置系统时钟 ReSysClkConfig_STOP(); } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值