stm32 睡眠模式的问题

[复制链接]

41

主题

160

帖子

332

积分

二氧化硅

Rank: 2

积分
332
楼主
查看: 7195回复: 2 发表于 2019-9-20 09:44:20   只看该作者
STM32为啥这样进入睡眠模式后就烧不进程序了?

在主函数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);

就是低功耗后没语句了,烧录以后,下次就烧不进程序,只能按着复位键烧程序

150

主题

446

帖子

1968

积分

审核员

Rank: 9Rank: 9Rank: 9

积分
1968
沙发
发表于 2019-9-20 11:52:20   只看该作者
利用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一个空程序即可,不要再烧一个休眠的程序了,之后就可以正常烧程序了。

43

主题

241

帖子

509

积分

单晶硅锭

Rank: 3Rank: 3

积分
509
板凳
发表于 2019-9-20 15:42:32   只看该作者
secret 发表于 2019-9-20 11:52
利用stm32单片机的休眠模式,使单片机间歇的休眠从而实现低功耗的目的。往往会出现进入休眠后无法唤醒,导 ...

666666666666666666
快速回复 返回顶部 返回列表