当前位置:   article > 正文

STM32使用内部时钟配置RTC,设置并读取时间、闹钟和周期唤醒_stm32电子时钟

stm32电子时钟

说明:由于开发板上没有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,80x400=32000,实现输入32KHz时钟分频到1Hz。

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

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

Hours为初始时间的小时

Minutes为初始时间的分钟

Seconds为初始时间的秒数

设置闹钟

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

2.使能闹钟中断

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

  1.  void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
  2. {
  3.        HAL_UART_Transmit(&huart6,(uint8_t *)"Alarm\r\n",7, 100);
  4. }

周期唤醒

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

2.开启周期唤醒中断

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

  1. void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
  2. {
  3.        RTC_TimeTypeDef        sTime;
  4.        RTC_DateTypeDef        sDate;
  5.        HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN);    
  6. sprintf(Uart6RxBuffer,"Time:%02d:%02d:%02d\t",sTime.Hours,sTime.Minutes,sTime.Seconds);
  7.        HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);
  8.        HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);
  9.      sprintf(Uart6RxBuffer, "Date:20%02d-%02d-%02d\r\n",sDate.Year,sDate.Month,sDate.Date);
  10.        HAL_UART_Transmit(&huart6,(uint8_t *)Uart6RxBuffer,strlen(Uart6RxBuffer), 100);
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/966055
推荐阅读
相关标签
  

闽ICP备14008679号