找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2135|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

AT-START-F403A開(kāi)發(fā)板的RTC測(cè)試驗(yàn)證

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 jinglixixi 于 2020-9-29 20:16 編輯

原打算先為開(kāi)發(fā)板配置一個(gè)顯示屏,有了顯示窗口就便于信息輸出了,無(wú)奈耗了幾天的時(shí)間也沒(méi)使OLED屏顯示半點(diǎn)痕跡,先在例程的功能模塊上練練手了。
RTC是大多數(shù)ARM產(chǎn)品都配置的功能,自然AT32F403AF也不例外,沒(méi)有OLED屏做支撐,也就只能依賴串口通信了,無(wú)奈呀,無(wú)奈!
由于開(kāi)發(fā)板自身就可以虛擬出串口,也就省去了外掛USB轉(zhuǎn)TTL串口模塊的麻煩,當(dāng)然這個(gè)虛擬出的串口占用的編號(hào)比較大,只能將其強(qiáng)行改的小一些,否則串口調(diào)試工具可不答應(yīng)。
將程序編譯下載后,其運(yùn)行效果如圖1所示。

1 運(yùn)行效果
天啊,這哥們兒還停留在2018年吶!
老哥醒醒吧,光陰荏苒,現(xiàn)在已經(jīng)是2020年了。
喚醒老哥的辦法只有一個(gè),那就是修改初始時(shí)間設(shè)置。
打開(kāi)時(shí)間設(shè)置函數(shù)才發(fā)現(xiàn)事情有點(diǎn)怪,什么情況?
你親自看下面這個(gè)函數(shù)吧!
  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. }
復(fù)制代碼

看出來(lái)沒(méi)有,我們通常使用的RTC函數(shù)是從相應(yīng)的寄存器中讀取時(shí)間值和日期值。
這哥們兒竟然需要統(tǒng)一算到秒,莫非它就是一個(gè)大號(hào)的秒信號(hào)計(jì)數(shù)器呀!
設(shè)置時(shí)間時(shí)折算到秒來(lái)更新計(jì)時(shí)值,讀取時(shí)再按進(jìn)制變換成年月日、分時(shí)秒。
難怪在程序的數(shù)組中存放了這些清規(guī)戒律吶!
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};
原來(lái)是怕老哥出軌呀!
通過(guò)分析RTC初始化函數(shù)RTC_Init(),才發(fā)現(xiàn)初始時(shí)間的設(shè)置函數(shù)被藏在這里,其內(nèi)容是RTC_Set(2018,8, 8, 8, 8, 0);
別客氣,按電腦的系統(tǒng)時(shí)間將它擺平了!
修改后經(jīng)程序的程序編譯下載,其步調(diào)終于跟上隊(duì)了,其時(shí)間效果如圖2所示。
嗯,表現(xiàn)還不賴!
哎,就怪我的表現(xiàn)不好,沒(méi)有及時(shí)為你配上一個(gè)顏值高的小臉蛋!算哥欠你的。

2 更新RTC計(jì)時(shí)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表