1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > stm32 RTC闹钟唤醒低功耗模式

stm32 RTC闹钟唤醒低功耗模式

时间:2018-10-12 07:01:17

相关推荐

stm32 RTC闹钟唤醒低功耗模式

stm32 RTC闹钟唤醒 低功耗模式

rtc初始化

void MX_RTC_Init(void){RTC_TimeTypeDef sTime = {0};RTC_DateTypeDef DateToUpdate = {0};hrtc.Instance = RTC;hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM;if (HAL_RTC_Init(&hrtc) != HAL_OK){Error_Handler();}/* USER CODE BEGIN Check_RTC_BKUP */RTC_SET_Alarm(&sTime );if(HAL_RTCEx_BKUPRead(&hrtc,RTC_BKP_DR1)!=0X1234){HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0X1234);}else return;/* USER CODE END Check_RTC_BKUP *//** Initialize RTC and set the Time and Date*/sTime.Hours = 0x0;sTime.Minutes = 0x0;sTime.Seconds = 0x0;if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;DateToUpdate.Month = RTC_MONTH_JANUARY;DateToUpdate.Date = 0x1;DateToUpdate.Year = 0x0;if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK){Error_Handler();}}void RTC_SET_Alarm(RTC_TimeTypeDef * sTime ){RTC_AlarmTypeDef alarm;HAL_RTC_GetTime(&hrtc, sTime, RTC_FORMAT_BIN);sTime->Seconds += ALARM_INTERVAL;if(sTime->Seconds >=60){sTime->Minutes += 1;sTime->Seconds = sTime->Seconds-60;if(sTime->Minutes >=60){sTime->Hours += 1;sTime->Minutes = 0;if(sTime->Hours >=24)sTime->Hours = 0;}}else ;alarm.AlarmTime.Hours = sTime->Hours;alarm.AlarmTime.Minutes = sTime->Minutes ;alarm.AlarmTime.Seconds = sTime->Seconds ;alarm.Alarm = RTC_ALARM_A;if(HAL_RTC_SetAlarm_IT(&hrtc, &alarm, RTC_FORMAT_BIN)!= HAL_OK){Error_Handler();}}

主函数

int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_RTC_Init();MX_USART1_UART_Init();while (1){/* USER CODE BEGIN 3 */HAL_Delay(100);HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET);HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);/* Get the RTC current Date */HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);/* Display date Format : yy/mm/dd */printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);/* Display time Format : hh:mm:ss */printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);printf("\r\n");HAL_SuspendTick(); HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI;SystemClock_Config();MX_RTC_Init();}/* USER CODE END 3 */}

5秒唤醒一次还是挺准的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。