• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32为啥这样进入睡眠模式后就烧不进程序了

huihui163 2019-09-19 浏览量:1973

【节日专享】ESP8266、STM32小系统板等免费送!点击领取https://www.icxbk.com/ask/detail/31744.html

在主函数while循环中

 GPIO_ResetBits(GPIOBGPIO_Pin_1);

  if(led0pwmval>=1000)led0pwmval=0;
// if(led0pwmval<0)led0pwmval=0;
//delay_ms(500);
TIM3->CCR3 = led0pwmval;
PWR_EnterSLEEPMode(0 PWR_SLEEPEntry_WFI);
就是低功耗后没语句了,烧录以后,下次就烧不进程序,只能按着复位键烧程序

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导致下一次程序烧不进去。通常的解决办法是:一般的开发板或单片机最小系统都会有复位键,按住复位键烧录

    有以下几种解决办法:

    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一个空程序即可,不要再烧一个休眠的程序了,之后就可以正常烧程序了。
    • 发布于 2019-09-19
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 低功耗是本来就不可以烧录,解决办法两个,

    1手动复位后立刻点击下载

    2可以用带复位控制的调试器,比如jlink调试器就带复位控制

    • 发布于2019-09-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32为啥这样进入睡眠模式后就烧不进程序了