RTC实时时钟特征与原理

RTC定义
RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。

RTC特征:
1.可编程的预分频系数:分频系数最高2^20。
2.32位的可编程计数器,可用于较长时间段的测量。
3.2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟频率的四分之一以上)。
4.可以选择以下三种RTC时钟源:
—— HSE时钟除以128;
—— LSE振荡器时钟:
—— LSI震荡器时钟。
5.2个独立的复位类型:
—— APB1接口由系统复位;
—— RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位。
6.3个专门的可屏蔽中断:
—— 闹钟中断,用来产生一个软件可编程的闹钟中断。
—— 秒中断,用来产生一个可编程的周期性中断信号(最长1s)。
—— 溢出中断,指示内部可编程计数器溢出并回转为0的状态。

RTC配置步骤:
1.使能PWR和BKP时钟:RCC_APB1PeriphClockCmd();
2. 使能后备寄存器访问: PWR_BackupAccessCmd();
3. 配置RTC时钟源,使能RTC时钟:
RCC_RTCCLKConfig();
RCC_RTCCLKCmd();
如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
4.设置RTC预分频系数:RTC_SetPrescaler();
5. 设置时间:RTC_SetCounter();
6.开启相关中断(如果需要):RTC_ITConfig();
7.编写中断服务函数:RTC_IRQHandler();
8.部分操作要等待写操作完成和同步。
RTC_WaitForLastTask();//等待最近一次对RTC寄存器的写操作完成
RTC_WaitForSynchro(); //等待RTC寄存器同步

你可能感兴趣的:(STM32)