避免在STM32使用HAL_SPI_TransmitReceive_DMA函数时,在回调函数中使用HAL_Delay导致程序卡死
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
#一个有趣情况的记录
提示:这里可以添加本文要记录的大概内容:
今天在stm32U5A5上使用DMA做SPI数据传输时发现了一个神奇的现象。
过程:使用了HAL的HAL_SPI_TransmitReceive_DMA函数,该函数负责实现SPI通讯,并在实现后会调用一个叫做HAL_SPI_TxRxCpltCallback的回调函数。如果在HAL_SPI_TxRxCpltCallback使用HAL_Delay函数,程序便会一直卡死。
如下图:理论上在完成通讯后,会点亮一个LED灯0.5S,接着熄灭。但是程序却卡在了这里,灯并没有熄灭。程序也没有进行下一步。
如上图灯一直在亮,程序也没有离开回调函数而是卡死在Hal_delay。很有趣的现象,但是本人知识水平匮乏,不知道原因是什么。如果有大佬解惑就好了。
`
作者:zhoujiegge