电源
主要有3中电源
- VREF+和VREF-,引脚少的芯片没有此两脚,芯片多的,VREF-接VSSA,VREF+接2.4V~VDDA,此VDDA和VSSA可以和VSS和VDD是同一引脚。
- VDD和VSS:范围:2.0V到3.6V
- VBAT,可选连接VDD,也可以用电池,此位保护32.768的晶振和备份寄存器中的值。
4.电压调节器
- 运转模式下,给内核提供1.8V电压
- 停止模式下,提供1.8V用来保存寄存器和SRAM的值
- 待机模式下,无输出,寄存器和SRAM都会丢失,只保留备份域。
电源管理器
- 电复位和掉电复位POR和PDR,其中POR>PDR
- PVD:设置PLS可以选择阈值,如果VDD降低到此阈值时,可设置产生中断,可以用此特征来紧急关闭某些功能。
低功耗模式
用大白话来说,低功耗有三种:
- 打个盹:睡眠模式,在此种模式下,只是CPU时钟关了在睡觉,任何的中断和唤醒事件都可以唤醒CPU工作。
- 深睡:停机模式,电灯关闭,门锁锁上,准备深睡,只有在外部敲门的时候可以叫醒,高速时钟都关闭,任意外部中断可唤醒。
- 死睡:只能靠WKUP引脚,RTC闹钟,复位引脚和看门狗强制复位才能唤醒。
降低系统时钟
时钟越快,功耗越大,可以根据需要适度的降低SYSCLK,HCLK,PCLK1,PCLK2的时钟
外部时钟的控制
也可以关闭一些暂时不用的外设的时钟,AHB,APB的时钟可以整体关闭。
睡眠模式
进入
可以设置为马上睡眠和等所有中断服务程序执行完成后再睡模式。给一条指令马上就可以生效了。
退出
- 如果是WFI,则任意中断可退出
- 如果是WFE,则需要唤醒事件,事件产生如下:
- 从外设寄存器中使能一个中断,而不是NVIC中使能,并且使能一个SEVONPEND位,唤醒后,外设中断标志和NVIC的标志都要清除。
- 也可以通过设置外部或者内部的EXIT线为事件模式,产生中断时唤醒。
停止模式
进入
先:系统控制寄存器设置SLEEPDEEP,电源控制清除PDDS和设置电源调节器的模式以后,
再:确保所有的中断标志都清除了
然后WFI和WFE指令,进入停止模式
退出
外部中断线,WFI则中断线设置为中断模式,WFE则设置为事件模式。
待机模式
待机模式可以足一关掉和设置看门狗,RTC,内部RC和外部32.768
进入
同停止模式,先:系统控制寄存器设置SLEEPDEEP,电源控制清除PDDS和设置电源调节器的模式以后,等待WFI和WFE指令,进入待机模式。
退出
WKUP引脚的上升沿、 RTC闹钟事件的上升沿、 NRST引脚上外部复位、 IWDG复位。
自动唤醒
- 上面说的都是被动唤醒,也可以自动唤醒。这里用到了RTC,定时的进行唤醒,这里的唤醒主要针对停止模式和待机模式。
- 操作流程为,先设置外部中断线,应该就是RTC为上升沿触发,然后设置RTC的闹钟事件即可。
电源相关的库函数
void PWR_BackupAccessCmd (FunctionalState NewState) //使能备份寄存器
void PWR_ClearFlag (uint32_t PWR_FLAG) //是唤醒还是待机状态
void PWR_DeInit (void) //
void PWR_EnterSTANDBYMode (void) //进入待机模式
void PWR_EnterSTOPMode (uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
//进入停止模式,1.8V是ON还是低功耗模式可选,中断OR事件可选
FlagStatus PWR_GetFlagStatus (uint32_t PWR_FLAG) //唤醒,待机,还是PVD输出
void PWR_PVDCmd (FunctionalState NewState) //PVD检测
void PWR_PVDLevelConfig (uint32_t PWR_PVDLevel) //PVD设置
void PWR_WakeUpPinCmd (FunctionalState NewState) //通过WKUP引脚唤醒使能