NXP MCU 技术论坛
直播中

贾埃罗

7年用户 1634经验值
私信 关注
[问答]

S32K314有没有办法在Rtc中获取毫秒数?

我正在使用 S32K314 板。在我的项目中,我添加了 RTC 并调用 Rtc_Ip_GettimeDate 来获取时间。
但我也需要得到毫秒数。有没有办法在 Rtc 中获取毫秒数?

回帖(1)

王辉

2023-9-22 10:02:33
S32K314 的 RTC 模块只能获取到秒级别的时间,无法直接获取毫秒数。不过,你可以通过自己的程序实现一个计数器来获取毫秒数,具体步骤如下:

1.在 RTC 初始化函数中开启 PIT(Periodic Interrupt Timer)模块,并将 PIT 设置为每 1 毫秒产生一次中断。

2.在 PIT 的中断函数中实现一个计数器,每次中断对计数器加 1。

3.使用 RTC 获取到秒级别的时间后,再加上计数器的值,即可得到毫秒数。

示例代码:

```
void RTC_Init(void)
{
    /* 初始化RTC */

    /* 初始化PIT */
    PIT_Init();
    PIT_EnableInterrupts(kPIT_Chnl_0, kPIT_TimerInterruptEnable);
    PIT_SetTimerPeriod(kPIT_Chnl_0, USEC_TO_COUNT(1000U, CLOCK_GetBusClkFreq()));
    PIT_StartTimer(kPIT_Chnl_0);
}

void PIT_IRQHandler(void)
{
    static uint32_t milliseconds = 0;

    PIT_ClearStatusFlags(kPIT_Chnl_0, kPIT_TimerFlag);

    milliseconds++;
}

void GetTimeDate(void)
{
    rtc_datetime_t datetime;

    /* 获取RTC时间 */

    uint32_t milliseconds = PIT_GetLifetimeTimerCount(PIT);
    uint32_t seconds = datetime.second;

    uint32_t totalMilliseconds = seconds * 1000 + (milliseconds / 1000);

    /* 计算出的总毫秒数即为当前时间的毫秒数 */
}
```

需要注意的是,该方法只是一种近似的获取毫秒数的方式,并不是精确的毫秒数。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分