開發板:STM32F407
1.目的:在屏幕上能顯示的實時時間精確到ms,如 時 :分:秒:毫秒;
2.方式:RTC結合systick定時器,由於RTC只能爲秒級,所以毫秒需要利用systick定時器來產生;
3.代碼:
(1)首先RTC日曆的例程官方都有提供,此處就不贅述了,這裏重點講有關systick產生毫秒計時的部分;
(2)main.c
SysTick_Init(); //SysTick 初始化函數,在初始函數中將中斷設置爲1ms中斷一次
while(1){
RTC_TimeAndDate_Show(); //RTC時鐘顯示
}
在SysTick 的中斷服務函數 SysTick_Handler()中添加如下代碼:
if(x==1000){ //x初值爲0,爲ms計次,1ms中斷一次,中斷1000次爲1秒;
s=s+1;
x=0;
if(s==60) //s初值爲0,爲s計次,s的設定是爲了與RTC產生的s作對比,驗證其是否同步以及準確性
s=0;
}
sprintf(LCDTemp5,"The MS:%0.3d",x); //在屏幕上打印毫秒
ILI9806G_DispStringLine_EN(LINE(8),LCDTemp5);
x++;
}
爲了減少頻繁的ms打印對systick秒的影響,方便與RTC輸出的秒做比較,此處將秒s設置爲全局變量在RTC_TimeAndDate_Show()函數中打印。
4.結果
由屏幕顯示可以發現,systick定時器產生的秒與RTC輸出的秒同步,毫秒也可正常打印。
注:在使用GPS時鐘源與RTC精度對時時,要在RTC加一個邏輯(如果秒數大於30時分加一否則直接清零)這樣時鐘源一個信號來分鐘可正常運作,否則很可能出現分不走的情況。