OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6217|回复: 7

mini板 的rtc时钟不准了 想重新设置下 发现不起作用 怎么办?

[复制链接]

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-7-28 16:43:11 | 显示全部楼层 |阅读模式

u8 RTC_Init(void)
{
 //检查是不是第一次配置时钟
 u8 temp=0;

 if (BKP->DR1 != 0X5050)//第一次配置
 { 
          RCC->APB1ENR|=1<<28;     //使能电源时钟    
          RCC->APB1ENR|=1<<27;     //使能备份时钟    
          WR->CR|=1<<8;           //取消备份区写保护
          RCC->BDCR|=1<<16;        //备份区域软复位   
          RCC->BDCR&=~(1<<16);     //备份区域软复位结束    
          RCC->BDCR|=1<<0;         //开启外部低速振荡器
          while ((!(RCC->BDCR&0X02))&&temp<250)//等待外部时钟就绪 
         {
              temp++;
              delay_ms(10);
         }
         if (temp>=250)return 1;//初始化时钟失败,晶振有问题    

         RCC->BDCR|=1<<8; //LSI作为RTC时钟     
         RCC->BDCR|=1<<15;//RTC时钟使能  
         while (!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成  
         while (!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
         RTC->CRH|=0X01;       //允许秒中断
         while (!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成  
         RTC->CRL|=1<<4;            //允许配置   
         RTC->RLH=0X0000;
         RTC->RLL=32767;           //时钟周期设置(有待观察,看是否跑慢了?)理论值:32767          
        Auto_Time_Set();
  
        RTC_Set(2013,7,28,16,18,04 );  //设置时间   
  
        RTC->CRL &= ~(1<<4);           //配置更新
        while (!(RTC->CRL&(1<<5)));   //等待RTC寄存器操作完成             
        BKP->DR1=0X5050;
  
        //BKP_Write(1,0X5050);//在寄存器1标记已经开启了
  
        //printf("FIRST TIME\n");
 }
        else//系统继续计时
       {
           while (!(RTC->CRL&(1<<3)));//等待RTC寄存器同步 
           RTC->CRH |= 0X01;      //允许秒中断
           while (!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
           //printf("OK\n");
      }           
      MY_NVIC_Init(0,0,RTC_IRQChannel,2);//RTC,G2,P2,S2.优先级最低    
     RTC_Get();//更新时间
 
     return 0; //ok
}

1、这句怎么一开始就是被注销的状态呢? //RTC_Set(2013,7,28,16,18,04 );  //设置时间  
2、不清楚到底该怎么重新设置时间。就是将这个函数RTC_Set(2013,7,28,16,18,04 );填上正确的时间 然后编译下载 就行了吗?我这样做 没作用,为啥呢?

乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-7-28 17:15:56 | 显示全部楼层
if (BKP->DR1 != 0X5050)//第一次配置

BKP_Write(1,0X5050);//在寄存器1标记已经开启了

把0x5050改一下,因为之前写入的就是0x5050,程序运行时判断正确了,就不会执行到你那个改的时间了
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-7-28 17:16:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-7-28 17:29:40 | 显示全部楼层
回复【2楼】20130401:
---------------------------------
BKP_Write(1,0X5050);//在寄存器1标记已经开启了
这句如果不注销 编译会出错,提示是没有这个函数。

你说的改0X5050  是改的哪句里面的0x5050呢?
我在 if (BKP->DR1 != 0X5050)//第一次配置   这句之前加上 BKP->DR1 = 0X5051; 也不行!
重新上电后 板子时间会回到初始值 这是怎么回事呢?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

6

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-4-4
在线时间
0 小时
发表于 2013-7-28 18:12:26 | 显示全部楼层
两个都改吧,同时改,我没加其他的。你可以参考原子哥的视频
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-7-28 19:06:09 | 显示全部楼层
回复【5楼】20130401:
---------------------------------
谢了
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-7-28 19:42:19 | 显示全部楼层
回复【5楼】20130401:
---------------------------------
视频下载好慢啊。能不能直接把RTC的视频发给我呢? 
还有 我掉电再重新上电后 时间会回到设定值,这是怎么回事呢?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-9-16 09:12:43 | 显示全部楼层
if (BKP->DR1 != 0X5050)

改成if (BKP->DR1 == 0X5050)就OK了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表