__IO uint32_t uwTick;
#define HAL_MAX_DELAY 0xFFFFFFFFU
uint32_t uwTickFreq = HAL_TICK_FREQ_DEFAULT; /* 1KHz */ /*1U*/
__weak void HAL_Delay(uint32_t Delay)
{
uint32_t tickstart = HAL_GetTick();
uint32_t wait = Delay;
/* Add a period to guaranty minimum wait */
if (wait < HAL_MAX_DELAY)//0xFFFFFFFFU
{
wait += (uint32_t)(uwTickFreq);
}
while((HAL_GetTick() - tickstart) < wait)
{
}
}
__weak uint32_t HAL_GetTick(void)
{
return uwTick;
}
思路:比如HAL_Delay(20)你需要延时20MS系统会怎么操作?
它会先标识一个数tickstart就是当前的计数值比如uwTick是40那就是40
然后跑一个函数把20+1变成21
后面开始死循环浪费时间 一直到uwTick-ickstart不在小于20就出去
那么uwTick是一直在++的 它在哪里++的呢?
__weak void HAL_IncTick(void)
{
uwTick += uwTickFreq;
}
void SysTick_Handler(void)
{
HAL_IncTick();
}
现在就明白了 每次中断它就++
那么问题还有一个 如何控制1MS++一次的??
HAL_RCC_GetSysClockFreq关注它!