重返STM32之---RTC使用
时间:11-11
来源:互联网
点击:
STM3f10x的RTC时能涉及到的寄存器有RCC,BKP和RTC这三个大类寄存器;其中RCC主要控制了实时时钟和备份区的电源使能和时钟使能;RTC模块和时钟配置系统的寄存器是在后备区域的(即BKP),通过BKP后备区域来存储RTC配置的数据可以让在系统复位或待机模式下唤醒后RTC里面配置的数据维持不变;为此备份区还得涉及一个寄存器PWR,电源管理寄存器,备份区的写保护位在PWR->CR的第八位。
由于整个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);
最后配置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中断优先级。
STM32RTC使 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)