背景
在使用DMA进行存储器到存储器之间的数据转换时,只有第一次调用HAL_DMA_Start()函数能够正常调用DMA,之后都无法调用DMA。
问题所在
在第一次调用HAL_DMA_Start()函数之后,DMA将会被标记为BUSY状态,
即DMA_HandleTypeDef结构体的State成员被置为HAL_DMA_STATE_BUSY
解决方案
调用HAL_DMA_PollForTransfer()函数
这个函数可以检测指定的DMA通道是否传输完成,
如果传输完成,该函数将会把DMA_HandleTypeDef结构体的State成员被置为HAL_DMA_STATE_READY
随后再次调用HAL_DMA_Start()函数即可再次使用DMA