原创 STM32 怎样在程序运行中改写RTC计数器寄存器的值

2008-8-11 10:44 5823 6 9 分类: MCU/ 嵌入式

STM32 怎样在程序运行中改写RTC计数器寄存器的值呢?我用以下方法总是清0,请高手指点。


        RCC->APB1ENR |= RCC_APB1ENR_PWREN;              // enable clock for Power interface
     PWR->CR      |= PWR_CR_DBP;  // enable access to RTC, BDC registers


     if ((0x00000100 & RCC_BDCR_RTCSEL) == 0x00000100) {   
       RCC->BDCR |= RCC_BDCR_LSEON;                                // enable LSE
       while ((RCC->BDCR & RCC_BDCR_LSERDY) == 0);  
     }
     
        RTC->CRL  |=  RTC_CRL_CNF;                                    // set configuration mode
     RTC->CNTH  = (((17 *3600UL)+(31 *60UL)+(1))>>16) & 0xFFFF;  
     RTC->CNTL  = (((17 *3600UL)+(31 *60UL)+(1))>>16) & 0xFFFF; 
     RTC->ALRH  = (((17 *3600UL)+(30 *60UL)+(1))>>16) & 0xFFFF; 
     RTC->ALRL  = (((17 *3600UL)+(30 *60UL)+(1))>>16) & 0xFFFF; 
     RTC->CRL  &= ~RTC_CRL_CNF;                                    // reset configuration mode
     
     RTC->CRH = 0x00000003;       // enable RTC interrupts
       NVIC->Enable[0] |= (1 << (RTC_IRQChannel & 0x1F));   // enable interrupt
       
     while ((RTC->CRL & RTC_CRL_RTOFF) == 0);   // wait until write is finished


     PWR->CR   &= ~PWR_CR_DBP;                       // disable access to RTC registers


 


/*------------------------------------------------------------------------------
* 函数: void RTC_Config(void) 这个是修改好的例程
* 功能: RTC配置(修改的数值在RTCTime里面)
* 参数: 无
* 返回: 无
 *------------------------------------------------------------------------------*/
void RTC_Config(void)
{   
   RCC->APB1ENR |= RCC_APB1ENR_PWREN;              // enable clock for Power interface 打开电源管理
   PWR->CR      |= PWR_CR_DBP;                                   // enable access to RTC, BDC registers 使能RTC和备份寄存器的访问


   RCC->BDCR |= RCC_BDCR_LSEON;                                // enable LSE外部低速振荡器使能
   while ((RCC->BDCR & RCC_BDCR_LSERDY) == 0);       // Wait for LSERDY = 1 (LSE is ready)
 
   RCC->BDCR |= (0x00000100 | RCC_BDCR_RTCEN);    // set RTC clock source, enable RTC clock选择LSE位RTC时钟,使能RTC时钟
 
   RTC->CRL &= (u16)~RTC_CRL_RSF;//Clear RSF flag [清RSF标志]   
   while ((RTC->CRL & RTC_CRL_RSF) == (u16)RESET);//Loop until RSF flag is set [循环到RSF标志置位]
   while ((RTC->CRL & RTC_CRL_RTOFF) == 0);                      // wait until write is finished
 
   RTC->CRH = 0x00000003;       // enable RTC interrupts
   NVIC->Enable[0] |= (1 << (RTC_IRQChannel & 0x1F));          // enable interrupt
 while ((RTC->CRL & RTC_CRL_RTOFF) == 0);                      // wait until write is finished
 
   RTC->CRL  |=  RTC_CRL_CNF;                                    // set configuration mode
   RTC->PRLH  = ((0x000003E8*32768/1000-1)>>16) & 0x00FF;   // set prescaler load register high
   RTC->PRLL  = ((0x000003E8*32768/1000-1)) & 0xFFFF;   // set prescaler load register low
   while ((RTC->CRL & RTC_CRL_RTOFF) == 0);                      // wait until write is finished
 
   RTC->CNTH = RTCTime >> 16;/* Set RTC COUNTER MSB word [设置RTC计数器高半字节]*/
   RTC->CNTL = (RTCTime & 0xFFFF);/* Set RTC COUNTER LSB word [设置RTC计数器低半字节]*/
   RTC->CRL  &= ~RTC_CRL_CNF;                                    // reset configuration mode       
   while ((RTC->CRL & RTC_CRL_RTOFF) == 0);                      // wait until write is finished
}

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户377235 2012-5-16 10:44

我遇到的问题是:

原来写入过RTC计数器,后来再也不能写入了

用户1017182 2008-10-30 14:14

已经搞懂了^_^

用户1090342 2008-8-12 22:34

RTC寄存器操作的锁解开了吗?

用户603227 2008-3-12 22:24

可惜我赶不上去年的电子设计竞赛了,今年又没有了 ,5555 我现在读大三,今年只有省内的电子设计竞赛,也想参加,可现在自己的知识和经验储备不足,希望得到楼主的指点
相关推荐阅读
用户1017182 2016-03-20 13:49
STM8-STVD(COSMIC)定义变量指定其类型和位定义
stm8 stvd下near等于51的xdatatiny等于51的idata 如何分配变量到指定的地址 举例: unsigned ch...
用户1017182 2016-03-05 21:59
磁保持继电器的效率问题
怎样才能最大化的发挥磁保持继电器的优势呢?...
用户1017182 2014-05-03 14:38
指示电量不足的简单电路设计
图中所示的设计实例可指示使用四节AA电池供电的音频测试仪器出现的电量不足状态。由于该仪器采用的是分立式设计,相较于单一来源的集成电路,该相同方法看似更符合项目初衷。   普通的红色LED既...
用户1017182 2014-05-03 14:19
source insight调用Keil编译器并且定位到错误行
  EDN博客精华文章  作者:mubo   效果图如下: 点击看原图   下面是实现方法:   1、Source Insight -> Options -> Custom Comma...
用户1017182 2014-05-03 14:13
解决source insight输入中文间距大,删除键Del键左右方向光标半个汉字的问题
在默认情况下,往Source Insight里输入中文,字间距相当的大,下面将帮助你解决这个问题。具体设置如下:1.Options->Style Properties2. 在左边Style Na...
用户1017182 2013-07-06 10:33
评论:@汽车电子设计之路 博客中提到的“功率Mosfet参数介绍”
好...
我要评论
3
6
关闭 站长推荐上一条 /3 下一条