跟猫一起酸汤面系列:第五天 小目标RTC

终于实现了一个小目标,RTC唤醒
先记录步骤吧
1、打开RTC,打开闹钟,产生中断
2、设置唤醒计数,默认37kHz/16=2.31kHz,好像最多28秒
2+、发现可以1Hz这样就有18小时,足够了,加1bit似乎用途不大
3、正常点灯熄灯,加一些延时
4、GPIO设置高阻输入,关闭GPIO时钟
5、进入待机模式

  /* USER CODE BEGIN 3 */
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
  HAL_Delay(1000);
  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
  HAL_Delay(1000);

  HAL_PWREx_EnableUltraLowPower();
  HAL_PWREx_EnableFastWakeUp();
  __HAL_RCC_GPIOA_CLK_DISABLE();
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  __HAL_RCC_GPIOA_CLK_ENABLE();     

6、中断唤醒

void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
{
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
}

7、时钟如果不是MSI,需要重新设一下
8、GPIO时钟打开,如果设置了高阻也要恢复
9、可以继续点灯睡觉了

标签: none

添加新评论