之前一直使用標准庫的,現在轉到HAL庫來后,編寫了第一個程序就遇到了問題。發現我使用庫里的延時程序HAL_Delay()時,會卡死在里面。
根據程序,進入到這個延時程序后 ,發現HAL_GetTick()取來的數字一直沒有變化,才發現是因為
__weak uint32_t HAL_GetTick(void)
{
return uwTick;
}
程序中的值沒有變化,搜uwTick后發現,其值由另一個程序進行處理,
__weak void HAL_IncTick(void) { uwTick++; }
再搜后,竟然沒有人調用此程序,所以其應該是因為中斷程序沒有調用此程序的原因,我找到了stm32f4xx_it.c,
其程序(我是從別的工程中拷貝過來的文件)
void SysTick_Handler(void) { }
竟然空空如也。
在此中加入HAL_IncTick();,並加入庫文件#include "stm32f4xx_hal.h"后進行一切正常了。
#include "stm32f4xx_hal.h" void SysTick_Handler(void) { HAL_IncTick(); }
因為是第一次熟悉HAL庫,對一些機制不是很清楚。之前一直認為是因為系統時鍾設置的問題,沒有想到在這個小小的問題上花費了一天的時間。
