我刚刚接手了一个为STM32 Cortex M3微控制器开发C代码的项目。
我立即遇到的一个问题是,我有一个自由运行的DMA通道,可以在2个USART之间传输数据,但有时需要将来自其他来源的数据发送到目标USART。
有没有办法检测DMA何时忙于传输数据或空闲,或者在传输完成时是否触发了任何中断。
非常感谢任何回复,
戴夫
答案 0 :(得分:3)
DMA完成既可以轮询也可以中断驱动。详细信息在特定部分的参考手册中 - “STM32 Cortex-M3”不够具体,无法将其缩小到您需要的文档,但您可以从ST's website下载它
实现DMA的最简单方法是使用STM32 Stanadard Peripheral Library。它包括所有外设的示例项目,包括USART的DMA轮询和DMA中断示例。您的工具链可能已包含库,但可能不是所有示例。即使您已经拥有该库,也最好检查它是否为最新版本。
答案 1 :(得分: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?)