(一)时钟RTC
stm32内部集成了一个秒计数器RTC,用于表现我们一样寻常的时间,如日期年代日,时分秒等,RTC的重要原理就是举行每秒自增,假如我们知道开始记秒的开始时间,就可以盘算现在的日期,但是这不须要我们盘算,我们只要调用C语言库函数即可自动完成秒数到一样寻常时间或一样寻常时间到秒数的转换,假如只是实现秒自增的功能,那么内部任何一个计数器都可以实现,但是时钟RTC与其他计数器差别的是其可以利用备用电源保持工作,在最小板供电制止时假如有备用电源其会继续工作;这里的备用电源供电引脚为stm32最小板的1好引脚,标注为VBT;
(二)备份寄存器BKP
和时钟RTC一样,备份寄存器BKP可以在备用电源供电时保持数据不丢失,但是其却不能在备用电源和主电源同时断电时间还保持掉电不丢失,这里利用BKP重要是为了给时钟判断是否须要初始化,假如备用电源没有断开,RTC仍旧在工作,那么在主电源重新供电的时间时钟就不须要初始化,直接读取其时钟值即可;
(三)RTC时钟和BKP备份寄存器
这里BKP重要是为了检测备用电源是否掉电的,我们的思绪是在上电的时间在备份寄存器BKP上写入一个数据(不要写默认值0),假如备用电源没有断电,这个数据会不停保持,假如断电则会规复为0,我们只要会初始化BKP和读写BKP即可,重要用到这几个函数
- void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data);
- // 写入备份寄存器
- uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR);
- // 读出备份寄存器
- void RTC_WaitForLastTask(void);
- // 等待上次任务完成,内部自带while循环和进入RTC的配置模式
- void RTC_WaitForSynchro(void);
- // 等待系统同步,自带while循环和进入RTC的配置模式
复制代码 (1)BKP初始化
BKP初始化要初始BKP的时钟,另有电源管理模块的时钟RCC_APB1Periph_PWR,以便在利用备用电源时stm32可以举行电源管理进入待机模式,这些时钟都是APB1上的外设,因此我们要变更APB1的初始化函数
- void rtc_bkp_init()
- {
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);
- }
复制代码 (2)RTC初始化
RTC不想其他外设一样用初始化布局体来举行初始化,我们要对每一步手动初始化,初始化流程图如下
起首要开启RTC的时钟并选择对应通道,然后要写入重装寄存器和预分频值以使得计数器实现每秒自增(即频率为1Hz),固然我们还要打开
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |