STM32的RTC学习笔记
Mcu:STM32F103RBT6
1、RTC简介
RTC(Real Time Clock)实时时钟,是STM32片内的一个外设,这个外设使用起来跟普通定时器有一点区别,他是独立的一个定时器,并且能产生两个中断,秒中断和闹钟中断,他的时钟源可以由外部或内部驱动,由使用者选择,一些教程说RTC使用内部低速时钟(LSI)的时钟频率不准,可能跑久了以后就会出现误差。
2、RTC配置流程
1、使能RTC外设时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//RTC时钟使能(电源)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP,ENABLE);//RTC时钟使能(备份)
2、使能备份寄存器访问
PWR_BackupAccessCmd(ENABLE);//使能备份寄存器访问
开启后才能对备份寄存器进行访问,后期可以讲数据写进备份寄存器里,以防掉电数据丢失。
3、初始化备份寄存器
BKP_DeInit();//初始化备份配置,即复位备份区域
4、时钟源选择与使能
RCC_LSICmd(ENABLE);//使能内部低速时钟
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == 0 );//内部低速时钟是否已开启
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//配置RTC时钟为内部低速时钟
RCC_RTCCLKCmd(ENABLE);//使能RTC时钟
因为开发板原因,我用的是内部低速时钟,时钟频率为40K,先使能低速时钟源,等待使能完毕,然后再配置它为RTC的时钟源。
5、写RTC寄存器
RTC_WaitForSynchro();//等待寄存器校准
RTC_WaitForLastTask();//等待RTC寄存器写入完成(每次向RTC寄存器写入后都要调用这个函数)
RTC_ITConfig(RTC_IT_SEC,ENABLE);
RTC_WaitForLastTask();//等待RTC寄存器写入完成(每次向RTC寄存器写入后都要调用这个函数)
Rtc_Nvic_Config();
RTC_SetPrescaler(39999);//设置预分频系数
RTC_WaitForLastTask();//等待RTC寄存器写入完成(每次向RTC寄存器写入后都要调用这个函数)
RTC_SetCounter(hour*</