实例
- #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^^
|