OpenEdv-开源电子网

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

开发板库函数版本 RTC程序中的问题

[复制链接]

18

主题

162

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2012-4-4
在线时间
0 小时
发表于 2012-4-4 21:34:49 | 显示全部楼层 |阅读模式

u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec)
 {
 u16 t;
 u32 seccount=0;
 if(syear<1970||syear>2099)return 1;   
 for(t=1970;t<syear;t++) //把所有年份的秒钟相加
  {
  if(Is_Leap_Year(t))seccount+=31622400;//闰年的秒钟数
  else seccount+=31536000;     //平年的秒钟数
  }
 smon-=1;
 for(t=0;t<smon;t++)    //把前面月份的秒钟数相加
  {
  seccount+=(u32)mon_table[t]*86400;//月份秒钟数相加
  if(Is_Leap_Year(syear)&&t==1)seccount+=86400;//闰年2月份增加一天的秒钟数   
  }
 seccount+=(u32)(sday-1)*86400;//把前面日期的秒钟数相加
 seccount+=(u32)hour*3600;//小时秒钟数
 seccount+=(u32)min*60;  //分钟秒钟数
 seccount+=sec;//最后的秒钟加上去
              
 //设置时钟
 //RCC->APB1ENR|=1<<28;//使能电源时钟
 //RCC->APB1ENR|=1<<27;//使能备份时钟
 //PWR->CR|=1<<8;    //取消备份区写保护
 //上面三步是必须的!
 //RTC->CRL|=1<<4;   //允许配置
 //RTC->CNTL=seccount&0xffff;
 //RTC->CNTH=seccount>>16;
 //RTC->CRL&=~(1<<4);//配置更新
 //while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成

 /* Enable PWR and BKP clocks */
     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟     
 /* Allow access to BKP Domain */
     PWR_BackupAccessCmd(ENABLE); //使能RTC和后备寄存器访问

  //  RTC_EnterConfigMode();//进入配置模式

 /* Wait until last write operation on RTC registers has finished */
 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成
 /* Change the current time */
 RTC_SetCounter(seccount); //设置RTC计数器的值
 /* Wait until last write operation on RTC registers has finished */
 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成   

 // RTC_ExitConfigMode();//退出配置模式

 return 0;     
 }
需要添加红色这几句才能修改时间。(红色代码对应原来的绿色代码)
但是,现在有一个小疑问:

为什么不需要置位CNF配置标志就能进入配置模式(l蓝色代码)。
请教大家了~~刚开始学STM32

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

162

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2012-4-4
在线时间
0 小时
 楼主| 发表于 2012-4-4 21:45:11 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-4-4 23:41:01 | 显示全部楼层
因为有红色部分代码的存在.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

162

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
406
金钱
406
注册时间
2012-4-4
在线时间
0 小时
 楼主| 发表于 2012-4-5 13:43:16 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
嗯~谢谢原子,后来仔细查了一下解决了,麻烦你
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2012-6-7
在线时间
0 小时
发表于 2012-6-8 21:22:44 | 显示全部楼层
void RTC_SetCounter(uint32_t CounterValue)

  RTC_EnterConfigMode();
  /* Set RTC COUNTER MSB word */
  RTC->CNTH = CounterValue >> 16;
  /* Set RTC COUNTER LSB word */
  RTC->CNTL = (CounterValue & RTC_LSB_MASK);
  RTC_ExitConfigMode();
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 05:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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