0

我正在为我的一个项目使用 STM32f7 Nucleo 板。我需要让程序等待我正在使用的变量指定的确切持续时间。等待时间以纳秒为单位,所以我不能使用HAL_Delay()方法。

定时器频率为 216 Mhz。我正在使用TIM3它以 1usTIM2滴答作响,而在 1 毫秒处滴答作响。

但是,我无法达到程序的确切等待时间。

while (ptpTimeCompare(configTime, currentTime) >= 0) {
    ptpTime temp;

    temp = ptpTimeDiff(configTime, currentTime);
    configStartWaitingTime = (uint64_t) (ptpTimetoCycleTime(&temp) *
        1000000000.0);

    if (temp.tv_sec > 0) {
        HAL_TIM_Base_Start(&htim2);
        delay_sec(temp.tv_sec * 1000);
        getCurrentTime(Scheduler);

        if (configTime >= currentTime) {
            HAL_TIM_Base_Start(&htim3);
            delay_usec(temp.tv_nsec / 100000);
            getCurrentTime(Scheduler);
        }
        else
            getCurrentTime(qbvScheduler);
    }
}

但是,最终currentTime总是大于configTime

有什么办法可以使currentTime&configTime完全相等,以便代码的执行恰好从 开始configTime

两个时间都存储在一个结构中

currentTime{
tv_sec;
tv_nsec
};

非常感谢这方面的任何帮助

提前致谢

4

0 回答 0