|
以下是例程里延时的函数,void DelayUs(uint32_t count)函数里有读系统时钟的函数FL_RCC_GetSystemClockFreq(),再加上后面的循环查询,一圈执行下来,肯定有不少意料外的时间,我测了一下,DelayUs(1)的延时函数,会有将近20多微秒的时间消耗,这里是不是很不可思议?
void DelayUs(uint32_t count)
{
count = (uint64_t)FL_RCC_GetSystemClockFreq() * count / 1000000;
count = count > 16777216 ? 16777216 : count;
SysTick->LOAD = count - 1;
SysTick->VAL = 0;
while (!((SysTick->CTRL >> 16) & 0x1));
}
void DelayMs(uint32_t count)
{
while (count--)
{
DelayUs(1000);
}
}
|
|