需求

因为 485 总线控制的时候,需要考虑在收发转换的时候,不能直接切换,应该让状态再保持一段时间,比如 2ms ,然后再进行切换,这样通讯会更加稳定。这就需要再收发中断里面使用延时,而最简单的延时就是 systick 的延时。但是实际上使用起来,这个延时工作不正常。

解决

出问题的原因也很简单,因为 st 默认让 systick 的中断优先级是最低,所以导致在其他中断中,使用 HAL_Delay, 内部的数值不变,所以一直困在中断里面。解决的方法也很简单,就是重新配置中断优先级,把 systick 的优先级提高到高于通信中断的优先级即可。

参考