×
单片机 > 单片机程序设计 > 详情

重返STM32之---RTC使用

发布时间:2020-05-29 发布时间:
|
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.  
  4. 库函数
  5.  
  6.  
  7. 等待RTC操作和同步完成
  8.  
  9.  
  10. 库函数
  11.  
  12.  
  13. 使能秒中断
  14.  
  15.  
  16. 库函数
RTC_ITConfig(RTC_IT_SEC, ENABLE);
  • 配置RTC
  • 允许配置
  •  
  •  
//set time---
  •  
  •  
  •  
  • 库函数
  •  
  •  
  •  
BKP_WriteBackupRegister(BKP_DR1, 0X5050);       
  1. 如果时钟已被设置过(RTC没有断电)
  2. 等待同步
  3. 开中断
  4. 等待操作完成
  5. 库函数
  6.  
RTC_ITConfig(RTC_IT_SEC, ENABLE);
  •  
 
最后配置RTC中断优先级。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法