開發闆: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時分加一否則直接清零)這樣時鐘源一個信号來分鐘可正常運作,否則很可能出現分不走的情況。