我正在为我的一个项目使用 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
};
非常感谢这方面的任何帮助
提前致谢