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

查看: 3562|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版