3

STM32 Cortex M3 マイクロコントローラ用の C コードを開発するプロジェクトを引き継いだところです。

私がすぐに抱えている問題は、2 つの USART 間でデータを転送するフリー ランニング DMA チャネルがあることですが、別のソースからのデータを目的の USART に送信する必要がある場合があります。

DMA がデータ転送でビジーかアイドル状態かを検出する方法はありますか、または転送が完了したときにトリガーされる割り込みはありますか。

ご回答ありがとうございます。

デイブ

4

2 に答える 2

3

DMA の完了は、ポーリングまたは割り込み駆動の両方で行うことができます。詳細は、特定のパーツのリファレンス マニュアルに記載されています。「STM32 Cortex-M3」は、必要なドキュメントに絞り込むほど具体的ではありませんが、ST の Web サイトからダウンロードできます。

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 に答える