STM32 HAL_Deleay() 函數 致使程序卡死

出現問題場景
 
個人程序有RTOS操做系統。使用的驅動庫是STM32官方最新的HAL庫。
移植好LwIP以太網協議後,在初始化網卡階段程序卡死。
 
出現問題緣由
 
後通過蠢笨的printf打印調試,不斷縮小問題範圍,定位了問題卡死在了這裏:
 
在HAL_Delay(PHY_RESET_DELAY);以前的調試信息能打印出來,它以後的就打印不出來了。把該延時函數註釋,又能正常運行,直到遇到下一個HAL_Delay函數。
 
這裏能夠肯定是HAL_Delay();延時函數致使卡死在這裏了。
 
可是很不解,一個通用的HAL_Delay();函數,怎麼就成了元兇?!
 
這裏我查閱了官方的HAL庫函數說明,其中有這麼一段須要注意的話:
 
這段話的意思是:HAL_Delay函數是基於系統滴答定時器中斷來累增計數產生延時效果。這代表若是該函數被調用在外設的中斷處理函數裏,系統滴答定時器的中斷就必須比這個外設中斷的優先級高,不然這個外設中斷將被阻塞。
 
我這裏只能找到這個資料。
 
解決辦法:
 
個人優先級組是所有搶佔式優先級。
原來的滴答定時器優先級在搶佔式裏最低
 
將優先級設置成最高:
 
問題暫時解決。
相關文章
相關標籤/搜索