STM32 HAL_Deleay() 函数 导致程序卡死

出现问题场景
 
我的程序有RTOS操作系统。使用的驱动库是STM32官方最新的HAL库。
移植好LwIP以太网协议后,在初始化网卡阶段程序卡死。
 
出现问题原因
 
后经过蠢笨的printf打印调试,不断缩小问题范围,定位了问题卡死在了这里:
 
在HAL_Delay(PHY_RESET_DELAY);之前的调试信息能打印出来,它之后的就打印不出来了。把该延时函数注释,又能正常运行,直到遇到下一个HAL_Delay函数。
 
这里可以确定是HAL_Delay();延时函数导致卡死在这里了。
 
但是很不解,一个通用的HAL_Delay();函数,怎么就成了元凶?!
 
这里我查阅了官方的HAL库函数说明,其中有这么一段需要注意的话:
 
这段话的意思是:HAL_Delay函数是基于系统滴答定时器中断来累增计数产生延时效果。这表明如果该函数被调用在外设的中断处理函数里,系统滴答定时器的中断就必须比这个外设中断的优先级高,否则这个外设中断将被阻塞。
 
我这里只能找到这个资料。
 
解决办法:
 
我的优先级组是全部抢占式优先级。
原来的滴答定时器优先级在抢占式里最低
 
将优先级设置成最高:
 
问题暂时解决。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值