藍橋杯比賽的RTC時鐘配置

2021-09-09 07:32:01 字數 1873 閱讀 1503

對於藍橋杯嵌入式比賽中的rtc部分呢,也經常考,其實就是乙個實時時鐘,配置起來也比較容易,偷懶的話,可以直接複製貼上賽場提供的例程程式。

它需要有rtc配置、中斷nvic配置和時間顯示,程式如下:

u8 timedisplay=0;

void rtc_configuration(void)

rcc_rtcclkconfig(rcc_rtcclksource_lsi);

rcc_rtcclkcmd(enable);

rtc_waitforsynchro();

rtc_waitforlasttask();

rtc_itconfig(rtc_it_sec, enable);

rtc_waitforlasttask();

rtc_setprescaler(39999);

rtc_waitforlasttask();

rtc_setcounter(hh*3600+mm*60+ss);

rtc_waitforlasttask();

}void nvic_configuration(void)

u8 text[20];

void time_display(u32 timevar)

比賽的時候,rtc和nvic配置函式是可以直接抄過來的,我們只需要寫乙個時間顯示函式time_display(u32 timevar),這個函式的引數就是通過rtc_getcounter()函式得到的,即獲取當前rtc內部計數器的計數值,然後將其轉化為24小時制,通過lcd顯示出來。一般情況下,我們是通過檢測秒觸發中斷rtc_it_sec來重新整理lcd顯示的,這也符合我們日常時鐘錶的規律,即一秒變化一次。中斷函式是寫在stm32f10x.it.c裡面的,中斷函式如下:

void rtc_irqhandler(void)

}}

秒中斷服務函式的主要任務就是改變標誌位timedisplay的值,然後清除秒中斷標誌位,然後就是需要判斷一下有沒有達到`23:59:59 ,即:

if(rtc_getcounter() == 0x00015180)
如果達到了此計數值,那麼由於時間是24小時制,那麼下乙個時間點應該是0:0:0,所以需要對計數值清零。

注意中斷服務函式的函式名字一定不要寫錯,寫錯了,編譯仍然會通過,但是它是進不了中斷服務函式的,沒辦法,stm32就是這樣,所有的中斷服務函式的名字都是固定的。

我們在中斷服務函式裡面改變標誌位的狀態,然後在主函式中通過檢測這個標誌位來進行重新整理lcd顯示,主函式程式如下:

while(1)

}

綜上,rtc配置還是很容易的,一般不會出什麼么蛾子。還有就是比賽的時候一般都會有時間初值,這個初值我們是在rtc配置函式裡面寫的,這兩行程式比賽提供的例程裡面是沒有的,需要我們自己新增,即:

rtc_setcounter(hh*3600+mm*60+ss);

rtc_waitforlasttask();

其中hh、mm、ss就是設定的初試時間值:(23:59:50)

#define hh 23

#define mm 59

#define ss 50

還有就是關於數值顯示的:

sprintf((char*)text,"time:%2d:%2d:%2d",thh,tmm,tss);
這個就是c語言的知識了,可以自己去試一下,改變%2d中的數值,看一下lcd上顯示的有什麼變化。

linux核心的rtc時鐘配置

linux核心的rtc時鐘配置,見device drivers real time clock 我們的rtc主要是有三種介面配置,一種是i2c介面,一種是spi介面,還有就是cpu自帶rtc時鐘晶元。推薦配置如下 i2c介面rtc時鐘支援晶元 dallas maxim ds1307 37 38 39...

火牛微控制器rtc時鐘配置 RTC硬體時鐘設定修改

這兩天一直在做i2c裝置驅動的理解,所以很少更新文章。由於對於表計來說,rtc硬體時鐘是非常重要的,並且其精度設計要求是比較高的,在busybox中,可以通過date命令設定當前的系統時間,然後通過hwclock將當前的系統時間寫入硬體時鐘中,但是busybox的date命令有乙個缺陷,就是不能精確...

藍橋杯比賽總結

藍橋杯總結 週六參加了 藍橋杯 的比賽,比賽感覺不是太好。比賽的開始,我把計算答案的題目當成了程式設計題,結果在上面浪費了很長的時間。做完三道題後,才意識到前面的題僅僅是寫出答案即可。之後就有些緊張了,由於前面花的時間太久,做後面的題時總感覺時間不夠。做到填空題時,有一道填空題不會,最後算是想出來了...