微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 重返STM32之---RTC使用

重返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的寄存器就可以了。

以下以实现实时时钟为例讲解初始化过程。
  1. 检测后备区是否已有有效标记
BKP->DR1 != 0x5050;//(DR1 TO DR42)
  • 库函数
BKP_ReadBackupRegister(BKP_DR1) != 0x5050;
  1. 开启电源管理和备份区时钟
(RCC->APB1ENR |=1<28;//POWER);
(RCC->APB1ENR |=1<27;//BACKUP);
  • 库函数
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  1. 取消备份去写保护
(PWR->CR |=1<8;//WP);
  • 库函数
  • 复位后备区所有寄存器
RCC->BDCR |=1<16;
RCC->BDCR &=~(1<16);
  • 库函数
  • 开启外部32k晶振
RCC->BDCR |=1<0;
  • 库函数
  • 32k晶振是否正常工作
  • 库函数
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
  1. 选择32k为RTC时钟并使能RTC
  2. 库函数
  3. 等待RTC操作和同步完成
  4. 库函数
  5. 使能秒中断
  6. 库函数
RTC_ITConfig(RTC_IT_SEC, ENABLE);
  • 配置RTC
  • 允许配置
//set time---
  • 库函数
BKP_WriteBackupRegister(BKP_DR1, 0X5050);
  1. 如果时钟已被设置过(RTC没有断电)
  2. 等待同步
  3. 开中断
  4. 等待操作完成
  5. 库函数
RTC_ITConfig(RTC_IT_SEC, ENABLE);

最后配置RTC中断优先级。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top