目录
一、简单介绍

主要涉及是的RTC的自动唤醒单元

使用1Hz的内部时钟时,最长可以36小时唤醒,方法是增加一个bit,这样原本16位的RTC唤醒寄存器从最大65565s变成65535*2s,约等于36小时
RTC唤醒后需要软件清除WUTF
二、cubmx配置
使能调试口,用于烧录

开启RTC,勾选内部唤醒,设置唤醒时钟频率为1Hz,唤醒计数值5,即每隔5s自动RTC唤醒

笔者选用PB6引脚监控芯片运行状态,配置成推挽输出

使用内部的HSI时钟

三、实验代码
cpp
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_RTC_Init();
/* USER CODE BEGIN 2 */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
for (int i = 0; i < 1000; i++)
{
HAL_GPIO_TogglePin(TEST_GPIO_Port, TEST_Pin);
HAL_Delay(2);
}
HAL_PWR_EnterSTANDBYMode();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
四、效果展示

单片机唤醒后持续翻转TEST引脚电平,持续3s后进入休眠,等待2s,RTC的5s唤醒时间到,芯片被唤醒,重新运行。