本文共 1360 字,大约阅读时间需要 4 分钟。
因为要节能,这个星期折腾待机与唤醒,首先是待机与按键的唤醒,下载和看了N多网上的资料,千转百回,还是官方资料靠谱,参考着做成功了,即待机后按键唤醒(闹钟也可以)。
int main(void){ HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_DMA_Init();MX_ADC_Init();MX_LPUART1_UART_Init();MX_USART1_UART_Init();MX_RTC_Init();HAL_RTC_MspInit(&hrtc);GetCurrentDateTime();//得到当前的时间和日期ITMP=(uint8_t)CurrentTime.Minutes+1;//设置为当前的下一分钟唤醒 RTC_Set_AlarmA(CurrentTime.Hours,ITMP,0);//重新设置闹钟printf("CurrentTime :%02d:%02d:%02d\r\n",CurrentTime.Hours, CurrentTime.Minutes,CurrentTime.Seconds); //显示时分秒HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(100);//亮HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0, GPIO_PIN_SET);HAL_Delay(100);//灭WakeUp_Init();while (1){ LED0_0;HAL_Delay (100); //GPIOB-0 15亮LED1_0;HAL_Delay (100); //GPIOB-1 15亮LED0_1;HAL_Delay (100); //GPIOB-0 15灭LED1_1;HAL_Delay (100); //GPIOB-1 15灭}}void WakeUp_Init(void)
{ SystemPower_Config();if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET){ __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);} HAL_Delay(3000); HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); HAL_PWR_EnterSTANDBYMode();}程序刷机后,启动后3秒进入待机状态,按下PA0对应的键系统再次启动,3秒后再次进入待机。因为上面已经初始化了闹钟,那么加上响应闹钟的回调函数,系统也会在到达闹钟指定时间自动启动,然后再待机。//回调函数void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){ EXTI0_1_IRQHandler();}转载于:https://blog.51cto.com/dawn0919/2396476