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


出現問題場景
 
我的程序有RTOS操作系統。使用的驅動庫是STM32官方最新的HAL庫。
移植好LwIP以太網協議后,在初始化網卡階段程序卡死。
 
出現問題原因
 
后經過蠢笨的printf打印調試,不斷縮小問題范圍,定位了問題卡死在了這里:
 
在HAL_Delay(PHY_RESET_DELAY);之前的調試信息能打印出來,它之后的就打印不出來了。把該延時函數注釋,又能正常運行,直到遇到下一個HAL_Delay函數。
 
這里可以確定是HAL_Delay();延時函數導致卡死在這里了。
 
但是很不解,一個通用的HAL_Delay();函數,怎么就成了元凶?!
 
這里我查閱了官方的HAL庫函數說明,其中有這么一段需要注意的話:
 
這段話的意思是:HAL_Delay函數是基於系統滴答定時器中斷來累增計數產生延時效果。這表明如果該函數被調用在外設的中斷處理函數里,系統滴答定時器的中斷就必須比這個外設中斷的優先級高,否則這個外設中斷將被阻塞。
 
我這里只能找到這個資料。
 
解決辦法:
 
我的優先級組是全部搶占式優先級。
原來的滴答定時器優先級在搶占式里最低
 
將優先級設置成最高:
 
問題暫時解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM