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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值