重返STM32之---RTC使用
由于整个RTC都是位于后备区,而且RTC的APB1总线和内核的APB1总线是独立的,所以在系统复位和唤醒时,RTC和BKP的那些时钟不用从新配置;他们只受Backup domain software reset这个位和系统完全掉电的影响。所以呢;RTC只要有备用电池,它可以完全独立工作。
如图一和图二所示 ![]() |
![]() |
大家要清楚f10x系列的RTC算不上一个真正意义上的RTC,它只是一个计数器,精度上难免差强人意,所以设计要注意是否满足计时要求。
如果是要实现实时时间以上所有的寄存器都要有相应设置,如果只用秒中断,那么只需要设置RCC和RTC的寄存器就可以了。
以下以实现实时时钟为例讲解初始化过程。
- 检测后备区是否已有有效标记
- 库函数
- 开启电源管理和备份区时钟
(RCC->APB1ENR |=1<<27;//BACKUP);
- 库函数
- 取消备份去写保护
- 库函数
- 复位后备区所有寄存器
RCC->BDCR &=~(1<<16);
- 库函数
- 开启外部32k晶振
- 库函数
- 32k晶振是否正常工作
- 库函数
- 选择32k为RTC时钟并使能RTC
- 库函数
- 等待RTC操作和同步完成
- 库函数
- 使能秒中断
- 库函数
- ;
- 配置RTC
- 允许配置
- 库函数
- 如果时钟已被设置过(RTC没有断电)
- 等待同步
- 开中断
- 等待操作完成
- 库函数
最后配置RTC中断优先级。
评论