stm32 hal库Deinit进入低功耗再退出时,DMA I2S发送异常

在进入低功耗时,需要把I2S的口换成GPIO口,那得禁止I2S呀,由于I2S使用的是DMA,所以干脆调用HAL库HAL_I2S_MspDeInit函数。结果发现,在进入低功耗又退出后,DMA不会产生中断了。诊断下来为DMA工作异常。

原因分析:

 在HAL_I2S_MspDeInit时,会把IO去初始化,然后再把DMA去使能。我觉得问题就出在这里,因为这时候有可能DMA在工作发送数据,此时先把IO去初始化,如果DMA在发送,那么DMA的数据写入后没有I2S读走,那么DMA发送会有异常。具体原因我不能确认,但是最终解决办法是,在调用HAL_I2S_MspDeInit之前先把DMA去使能__HAL_RCC_DMA1_CLK_DISABLE,则进入再退出低功耗后一切正常。

 

你可能感兴趣的:(低功耗)