STM32内部时钟配置RTC,实现时间、闹钟和周期唤醒设置与读取

说明:由于开发板上没有32.768kHz的时钟,所以选择内部32kHz的时钟。

基本配置

1.首先使能RTC

2.配置时钟(内部时钟32kHz)

3. General选项组里配置小时模式,有24小时制和12小时制可选,后面的127和255组合成分频系数,127实际对应128,255实际对应256,所以128×256=32768,正好实现输入32.768KHz时钟分频到1Hz。

由于我们选择内部时钟,所以设置为79和399,80×400=32000,实现输入32KHz时钟分频到1Hz。

4. 初始时间及日期配置:

DataFormat选项分别为BIN(时间为10进制)BCD(时间为16进制)

Hours为初始时间的小时

Minutes为初始时间的分钟

Seconds为初始时间的秒数

设置闹钟

1.闹钟使用,闹钟A设置为xx:xx:30触发,即每分钟的30秒触发。

2.使能闹钟中断

3.调用闹钟回调函数,每分钟30秒的时候触发一次

 void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)

{

       HAL_UART_Transmit(&huart6,(uint8_t *)"Alarm\r\n",7, 100);

}

周期唤醒

1.配置,Wake Up Clock:周期唤醒的时钟源;Wake Up Counter:唤醒计数器的重载值,如果设置为0,则每个时钟周期中断一次。如选择周期唤醒时钟源为1Hz信号时,若设置次值为0,则每一秒发生一次唤醒中断。

2.开启周期唤醒中断

3.重写回调函数,并获取时间日期(需同时获取,否则时间会锁死)

void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)

{

       RTC_TimeTypeDef        sTime;
       RTC_DateTypeDef        sDate;
       HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN);        
    sprintf(Uart6RxBuffer,"Time:%02d:%02d:%02d\t",sTime.Hours,sTime.Minutes,sTime.Seconds);
       HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);
       HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);
     sprintf(Uart6RxBuffer, "Date:20%02d-%02d-%02d\r\n",sDate.Year,sDate.Month,sDate.Date);
       HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);

}

作者:凌雲木794

物联沃分享整理
物联沃-IOTWORD物联网 » STM32内部时钟配置RTC,实现时间、闹钟和周期唤醒设置与读取

发表回复