实例
#include "sys.h"
#include "lcd.h"
#include "delay.h"
#include "key.h"
#include "uart.h"
#include "exti.h"
#include "wkup.h"
#include "rtc.h"
void Standby(void)
{
/*********************************
使能PWR时钟
*********************************/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_ENABLEBkUpAcess();//后备区域访问使能
/*********************************
RTC相关处理:关闭RTC相关中断
1. 禁止RTC中断
2. 清零对应中断位
3. 清除PWR唤醒(WUF)标志(通过设置PWR_CR的CWUF位实现)
4. 重新使能RTC对应中断
5. 进入低功耗模式
*********************************/
//1
__HAL_RTC_WAKEUPTIMER_DISABLE_IT(&RTC_Handler,RTC_IT_WUT);
__HAL_RTC_TIMESTAMP_DISABLE_IT(&RTC_Handler,RTC_IT_TS);
__HAL_RTC_ALARM_DISABLE_IT(&RTC_Handler,RTC_IT_ALRA|RTC_IT_ALRBF);
//2
__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_WUT);
__HAL_RTC_TIMESTAMP_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_TS);
__HAL_RTC_ALARM_CLEAR_FLAG(&RTC_Handler,RTC_FLAG_ALRA|RTC_FLAG_ALRBF);
//
__HAL_RCC_BACKUPRESET_RELEASE(); //备份区域复位结束
__HAL_RTC_WRITEPROTECT_ENABLE(&RTC_Handler);//使能RTC写保护
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除Wakeup标志
//4
__HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN);
//5
HAL_PWR_EnterSTANDBYMode();
}
int main(void)
{
HAL_Init();//初始化HAL库
Stm32_CLock_Init(360,25,2,8);//设置时钟180MHz
delay_init(180);//初始化延时函数
uart_init(115200);//初始化USART
LED_Init();//初始化LED
KEY_Init();//初始化KEY
SDRAM_Init();//初始化SDRAM
LCD_Init();//初始化LCD
while(1)
{
delay_ms(10);
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
standby();
}
}
}
参考资料:正点原子视频 Thanks^^ |