Embedded 是否可以检测Cortex M3上的DMA通道何时空闲?

Embedded 是否可以检测Cortex M3上的DMA通道何时空闲?,embedded,arm,dma,cortex-m3,Embedded,Arm,Dma,Cortex M3,我刚刚接手了一个为STM32 Cortex M3微控制器开发C代码的项目 我立即遇到的一个问题是,我有一个自由运行的DMA通道,可以在两个USART之间传输数据,但有时需要将来自另一个源的数据发送到目标USART 是否有任何方法可以检测DMA何时正忙于传输数据或空闲,或者在传输完成时是否有任何中断触发 非常感谢您的回复 Dave以下是检查DMA操作是否已完成的步骤: DMA_Cmd(DMA2_Channel5, ENABLE); // start while (!DMA_GetFlagStatu

我刚刚接手了一个为STM32 Cortex M3微控制器开发C代码的项目

我立即遇到的一个问题是,我有一个自由运行的DMA通道,可以在两个USART之间传输数据,但有时需要将来自另一个源的数据发送到目标USART

是否有任何方法可以检测DMA何时正忙于传输数据或空闲,或者在传输完成时是否有任何中断触发

非常感谢您的回复


Dave

以下是检查DMA操作是否已完成的步骤:

DMA_Cmd(DMA2_Channel5, ENABLE); // start
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?)

DMA完成既可以轮询也可以中断驱动。有关详细信息,请参见您特定部分的参考手册-“STM32 Cortex-M3”不够具体,无法将其缩小到您所需的文档范围,但您可以从下载


实现DMA的最简单方法是使用。它包括所有外设的示例项目,包括USART的DMA轮询和DMA中断示例。您的工具链可能已经包含该库,但可能不是所有示例。即使您已经拥有了该库,检查它是否是最新版本也是一个好主意。

这并不是严格意义上的离题,但如果您在这里没有得到希望的答案,您可能会从Electronics StackExchange获得一个更好的。只需再添加一点-如果一个外设有2个DMA通道向其传输数据,DMA控制器是否可能在DMA通道之间进行仲裁,以便一次只有一个写入到该位置?谢谢多项式-我将在那里查看。谢谢-将给它一个尝试