开发板: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时分加一否则直接清零)这样时钟源一个信号来分钟可正常运作,否则很可能出现分不走的情况。