STM32 RTC模块的使用

发布时间 2023-10-14 16:32:32作者: okyihu

1 STM32 实时时钟RTC原理:

    A 外部晶振采用32.768KHz的原因,因为2的15次方2^15=32768, 所以32.768KHz分频15次后刚好是1Hz,1S就是1Hz。

    B RTC模块有一个实时计数器Real Time Counter,它对震荡源脉冲计数,每个脉冲计数器加1,所以不能从该计数器直接获取时间时、分、秒。

    C STM32F103系列的RTC是不带时间、日期寄存器的,只有STM32F4系列的才有时间、日期寄存器。

    D STM32F103系列MCU提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期. RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。

2 调试过程:

 HAL RTC按如下设置后无法产生秒中断。

A 排除32.768K晶振的原因,32.768K晶振如果不配置成RTC的时钟,示波器在该晶振上测不到32.768K的波形。所以首先要将32.768K外部时钟配置为RTC的时钟,晶振才会起震,这和外部8M高速晶振并不相同。

B RTC配置成外部32.768K时钟后,如果硬件不焊接32.768K时钟,则软件会死机,进入错误。

C 在RTC初始化里设置RTC当前时间,并使能秒中断,再调试运行后可以正常进入秒中断了。

 

RTC_TimeTypeDef sTime ={0,0,0};
HAL_RTC_SetTime(&hrtc,&sTime, RTC_FORMAT_BIN);
hrtc.Instance->CRH |=0x01;