博客首页 | 排行榜 |

bjtuxiaolong的博客

从0开始学STM32

个人档案
博文分类
RTC初探  2009-02-05 22:00
今天回学校了,参加建模,以后的几天基本没时间学这个了,建模以后再接着看。
对于这STM32也感觉很迷茫了,总之是感觉要学的东西太多,现在虽然学了一点,有点入门了,不过只是在一些些很基本的应用上。

RTC时钟实际上可以看做是一个独立的定时器。

RTC的时钟源可以是HSE/128,LSE或者LSI时钟,这个是由RCC_BDCR(备份区域控制寄存器)来选择的。
对于RTC来说一般用LSE,LSE是一个32.768kHz的时钟源,在VDD掉电的情况下,由VBAT维持供电RTC也可以正常工作。

在初始化的过程中要启用电源管理和BKP备份器的时钟,使其系统掉电了,BKP和RTC还能继续工作,RTC继续计时。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE);
下面是RTC初始化程序
void RTC_configuration()
{  //允许PWR和BKP时钟
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP|RCC_APB1Periph_PWR, ENABLE);
   //允许访问BKP
   PWR_BackupAccessCmd(ENABLE);
   BKP_DeInit();
   //允许LSE
   RCC_LSEConfig(RCC_LSE_ON); 
   //等待LSE就绪
   while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);
   //RTC使用LSE作为时钟
   RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); 
   //RTC的时钟开启
   RCC_RTCCLKCmd(ENABLE); 
   //等待RTC寄存器同步
   RTC_WaitForSynchro();  
   //等待上次RTC寄存器完成操作
   RTC_WaitForLastTask();  
   //RTC开中断,RTC中断有三种,这里采用秒中断
   RTC_ITConfig(RTC_IT_SEC, ENABLE); 
   RTC_WaitForLastTask();//
   RTC_SetPrescaler(32767);  
   //RTC预分频RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) 
   RTC_WaitForLastTask(); 
}
这样,RTC就启动了。
整个的计时程序还没来得及弄...过几天补上
|
上一篇:这段很乱的日子 | 下一篇:【转】这些代码大家都用得到
以下网友评论只代表其个人观点,不代表本网站的观点或立场