因為不知道的原因SysTick_Handler
不進入中斷,HAL_IncTick
函式中的uwTick
計數值不能自增,延時函式卡死。
用定時器代替系統時鐘計數,並重寫HAL_Delay延時函式。
不使用中斷。
需要找一個32位計數週期的定時器,才能和32位計數值匹配。
我選擇的TIM2,STM32H750的TIM2掛載在APB1上,時鐘樹設定為60MHz,
60000預分頻,週期剛好1ms,如果時鐘太快,可以考慮兩個定時器串聯。
不用開啟中斷,這是重寫的HAL_Delay函式。
void HAL_Delay(uint32_t Delay)
{
uint32_t tickstart = __HAL_TIM_GET_COUNTER(&htim2);
uint32_t wait = Delay;
/* Add a freq to guarantee minimum wait */
if (wait < HAL_MAX_DELAY)
{
wait += (uint32_t)(uwTickFreq);
}
uint32_t ticknow = __HAL_TIM_GET_COUNTER(&htim2);
while ((ticknow - tickstart) < wait)
{
ticknow = __HAL_TIM_GET_COUNTER(&htim2);
}
}