我刚刚接手了一个为 STM32 Cortex M3 微控制器开发 C 代码的项目。
我立即遇到的一个问题是我有一个自由运行的 DMA 通道,可以在 2 个 USART 之间传输数据,但有时需要将来自另一个源的数据发送到目标 USART。
有什么方法可以检测 DMA 何时忙于传输数据或空闲,或者传输完成时是否触发了任何中断。
非常感谢您的任何回复,
戴夫
DMA 完成既可以是轮询的,也可以是中断驱动的。详细信息在您特定部分的参考手册中 - “STM32 Cortex-M3”不够具体,无法将其缩小到您需要的文档,但您可以从ST 的网站下载。
实现 DMA 的最简单方法是使用STM32 标准外设库。它包括所有外设的示例项目,包括 USART 的 DMA 轮询和 DMA 中断示例。您的工具链可能已经包含该库,但可能不是所有示例。即使您已经拥有该库,最好检查它是否为最新版本。
这是我检查 DMA 操作是否已完成的操作:
DMA_Cmd(DMA2_Channel5, ENABLE); // start
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?)