STM32实现待机唤醒 库函数版
很多单片机都有低功耗模式,STM32 也不例外。在系统或电源复位以后,微控制器处于运
行状态。运行状态下的 HCLK 为 CPU 提供时钟,内核执行程序代码。当 CPU 不需继续运行时,
可以利用多个低功耗模式来节省功耗,例如等待某个外部事件时。用户需要根据最低电源消耗,
最快速启动时间和可用的唤醒源等条件,选定一个最佳的低功耗模式。
STM32 的低功耗模式有 3 种:
1)睡眠模式(CM3 内核停止,外设仍然运行)
2)停止模式(所有时钟都停止)
3)待机模式(1.8V 内核电源关闭)
在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需要 2uA 左右的电
流。停机模式是次低功耗的,其典型的电流消耗在 20uA 左右。最后就是睡眠模式了。用户可
以根据自己的需求来决定使用哪种低功耗模式。
而本文实现待机模式,
进入待机模式,主要根据开发手册提供的图
实现步骤如下:
- 外设使能(在APB1)
- 清除wakeup标志
- PWR使能
- 进入待机模式
实现代码如下
#include "WakeUp.h"
//待机模式
void WakeUp_Stand(void)
{
//外设使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
//清除WakeUp标志
PWR_ClearFlag(PWR_FLAG_WU);
//使能
PWR_WakeUpPinCmd(ENABLE);
//进入待机模式
PWR_EnterSTANDBYMode();
}
主函数如下
#include "stm32f10x.h"
#include "Uart.h"
#include "WakeUp.h"
#include "SysTick.h"
#include "led.h"
int main()
{
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
LED_Init();
UART1_Init(9600);
printf ("12121212\r\n");
led1 = 0;
while(1)
{
printf("倒计时 5\r\n");
led1 = 0;
delay_ms(1000);
printf("倒计时 4\r\n");
// led1 = 1;
delay_ms(1000);
printf("倒计时 3\r\n");
led1 = 0;
delay_ms(1000);
printf("倒计时 2\r\n");
//led1 = 1;
delay_ms(1000);
printf("倒计时 1\r\n");
led1 = 0;
delay_ms(1000);
WakeUp_Stand();
}
}
下篇介绍寄存器版本实现关机功能点此处