你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 3553|回复: 1

STM32学习(五)——RTC在MDK中的配置

[复制链接]

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2010-10-15 22:06:26 | 显示全部楼层 |阅读模式
1、RTC简介
        实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。
系统复位后,禁止访问后备寄存器和RTC,防止对后备区域(BKP)的意外写操作。执行以下操作使能对后备寄存器和RTC的访问:
●设置寄存器RCC_APB1ENR的PWREN和BKPEN位来使能电源和后备接口时钟
●设置寄存器PWR_CR的DBP位使能对后备寄存器和RTC的访问。

2、主要特性
●可编程的预分频系数:分频系数最高为220。
●32位的可编程计数器,可用于较长时间段的测量。
●2个单独的时钟:用于APB1接口的PCLK1和RTC时钟(此时的RTC时钟必须小于PCLK1时钟的四分之一以上)
●可以选择以下三种RTC的时钟源:
─HSE时钟除以128
─LSE振荡器时钟
─LSI振荡器时钟(详见6.2.8节RTC时钟)
●2种独立的复位类型:
─APB1接口由系统复位
─RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位(详见6.1.3节)。
●3个专门的可屏蔽中断:
─闹钟中断,用来产生一个软件可编程的闹钟中断。
─秒中断,用来产生一个可编程的周期性中断信号(最长可达1秒)。
●溢出中断,检测内部可编程计数器溢出并回转为0的状态。
3、RTC初始化配置
/*******************************************************************************
* Function Name  : RTC_Configuration
* Description    : RTC配置
* Input          :
* Output         :
* Return         : None
*******************************************************************************/
void RTC_Configuration(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  PWR_BackupAccessCmd(ENABLE);
  BKP_DeInit();
     
  RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);//时钟配置,选择分频方式
  RCC_RTCCLKCmd(ENABLE);
  RTC_WaitForSynchro();
  RTC_WaitForLastTask();
  RTC_ITConfig(RTC_IT_SEC, ENABLE);
  RTC_WaitForLastTask();
  RTC_SetPrescaler(93750); /* RTC period = RTCCLK/RTC_PR = (93.750 KHz)/(RTC+1) */  
  RTC_WaitForLastTask();
}
4、RTC时钟配置
/*******************************************************************************
* Function Name  : RTC_TimeSet
* Description    : RTC时间设置
* Input          : HH:输入小时,MM:输入分钟,SS:输入秒
* Output         :
* Return         : None
*******************************************************************************/
void RTC_TimeSet(u8 HH,u8 MM,u8 SS)
{
   u32 TimeCount;
   TimeCount=HH*3600+MM*60+SS;
           
   RTC_WaitForLastTask();   //等待上一次的RTC操作完成
   RTC_SetCounter(TimeCount);  //时间的存储方式是以秒的方式来存储的
   RTC_WaitForLastTask();
}
5、RTC中断的开启
/*******************************************************************************
* Function Name  : RTC_It
* Description    :
* Input          :
* Output         :
* Return         : None
*******************************************************************************/
void RTC_It(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQChannel;//选择中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =6;//中断优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;开启中断
    NVIC_Init(&NVIC_InitStructure);
 }
        我们在日常使用RTC的时候需要用到很多的寄存器,这里就不一一说明了。大家可以参考手册来使用寄存器。因为ST提供了成熟的库文件,我们只需要明白每个库里面程序的意思就可以了。这样省去了我们开发底层驱动的时间,如果大家认为不太好用,也可以自己编写程序,这样就需要明白寄存器的内容了。
       很多方案使用RTC的方式是不一样的,有使用时间戳的、也有自定义时间的。这个根据我们的需求来定。程序编写的过程中,一定要明白寄存器、程序代码的意思,才能更好的使用。
回复

使用道具 举报

38

主题

542

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-11-11
发表于 2016-11-11 22:07:22 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版