標(biāo)題: AT-START-F403A開發(fā)板的RTC測(cè)試驗(yàn)證 [打印本頁]

作者: jinglixixi    時(shí)間: 2020-9-28 22:45
標(biāo)題: AT-START-F403A開發(fā)板的RTC測(cè)試驗(yàn)證
本帖最后由 jinglixixi 于 2020-9-29 20:16 編輯

原打算先為開發(fā)板配置一個(gè)顯示屏,有了顯示窗口就便于信息輸出了,無奈耗了幾天的時(shí)間也沒使OLED屏顯示半點(diǎn)痕跡,先在例程的功能模塊上練練手了。
RTC是大多數(shù)ARM產(chǎn)品都配置的功能,自然AT32F403AF也不例外,沒有OLED屏做支撐,也就只能依賴串口通信了,無奈呀,無奈!
由于開發(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è)置。
打開時(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ù)制代碼

看出來沒有,我們通常使用的RTC函數(shù)是從相應(yīng)的寄存器中讀取時(shí)間值和日期值。
這哥們兒竟然需要統(tǒng)一算到秒,莫非它就是一個(gè)大號(hào)的秒信號(hào)計(jì)數(shù)器呀!
設(shè)置時(shí)間時(shí)折算到秒來更新計(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};
原來是怕老哥出軌呀!
通過分析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)不好,沒有及時(shí)為你配上一個(gè)顏值高的小臉蛋!算哥欠你的。

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





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1