天天看點

STM32F4實時時間精确到ms

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

繼續閱讀