找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1565|回复: 0
打印 上一主题 下一主题
收起左侧

AT-START-F403A开发板的RTC测试验证

[复制链接]
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2020-9-29 20:16 编辑

原打算先为开发板配置一个显示屏,有了显示窗口就便于信息输出了,无奈耗了几天的时间也没使OLED屏显示半点痕迹,先在例程的功能模块上练练手了。
RTC是大多数ARM产品都配置的功能,自然AT32F403AF也不例外,没有OLED屏做支撑,也就只能依赖串口通信了,无奈呀,无奈!
由于开发板自身就可以虚拟出串口,也就省去了外挂USBTTL串口模块的麻烦,当然这个虚拟出的串口占用的编号比较大,只能将其强行改的小一些,否则串口调试工具可不答应。
将程序编译下载后,其运行效果如图1所示。

1 运行效果
天啊,这哥们儿还停留在2018年呐!
老哥醒醒吧,光阴荏苒,现在已经是2020年了。
唤醒老哥的办法只有一个,那就是修改初始时间设置。
打开时间设置函数才发现事情有点怪,什么情况?
你亲自看下面这个函数吧!
  1. uint8_t RTC_Set(uint16_t syear, uint8_t smon, uint8_t sday, uint8_t hour, uint8_t min, uint8_t sec)
  2. {
  3.          uint32_t t;
  4.          uint32_t seccount=0;
  5.          if(syear<1970||syear>2099)
  6.                   return 1;
  7.          for(t=1970;t<syear;t++)
  8.          {
  9.                    if(Is_Leap_Year(t))seccount+=31622400;
  10.                    else seccount+=31536000;
  11.          }
  12.          smon-=1;
  13.          for(t=0;t<smon;t++)
  14.          {
  15.                    seccount+=(uint8_t)mon_table[t]*86400;
  16.                    if(Is_Leap_Year(syear)&&t==1)seccount+=86400;           
  17.          }
  18.          seccount+=(uint8_t)(sday-1)*86400;
  19.          seccount+=(uint8_t)hour*3600;
  20.          seccount+=(uint8_t)min*60;
  21.          seccount+=sec;
  22.          /* Enable PWR and BKP clock */
  23.          RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR | RCC_APB1PERIPH_BKP, ENABLE);
  24.          /* Enable write access to Backup domain */
  25.          PWR_BackupAccessCtrl(ENABLE);
  26.          /* Set the RTC counter value */
  27.          RTC_SetCounter(seccount);
  28.          /* Wait until last write operation on RTC registers has finished */
  29.          RTC_WaitForLastTask();
  30.          return 0;     
  31. }
复制代码

看出来没有,我们通常使用的RTC函数是从相应的寄存器中读取时间值和日期值。
这哥们儿竟然需要统一算到秒,莫非它就是一个大号的秒信号计数器呀!
设置时间时折算到秒来更新计时值,读取时再按进制变换成年月日、分时秒。
难怪在程序的数组中存放了这些清规戒律呐!
const uint8_t table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5};
const uint8_tmon_table[12]={31,28,31,30,31,30,31,31,30,31,30,31};
原来是怕老哥出轨呀!
通过分析RTC初始化函数RTC_Init(),才发现初始时间的设置函数被藏在这里,其内容是RTC_Set(2018,8, 8, 8, 8, 0);
别客气,按电脑的系统时间将它摆平了!
修改后经程序的程序编译下载,其步调终于跟上队了,其时间效果如图2所示。
嗯,表现还不赖!
哎,就怪我的表现不好,没有及时为你配上一个颜值高的小脸蛋!算哥欠你的。

2 更新RTC计时

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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