3

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

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

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

非常感谢您的任何回复,

戴夫

4

2 回答 2

3

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

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

于 2012-05-21T16:35:32.267 回答
2

这是我检查 DMA 操作是否已完成的操作:

DMA_Cmd(DMA2_Channel5, ENABLE); // start
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?)
于 2012-05-21T10:56:36.247 回答