Normal DMA転送でHalf Complete 割り込みが発生する

By | 2021年10月2日

メモです。

  • CubeIDE 1.7.0
  • Ubuntu 20.04 LTS
  • STM32F091, F446, F722, F746, G070, G431, H743, L412

症状

先に報告した「CubeIDEが生成するコードでDMAによるシリアル転送ができない」問題のワークアラウンドを適用すると、シリアルに対してDMA転送ができるようになります。しかしながら、DMAをノーマル・モードに設定しているにもかかわらず、サーキュラー・モードでしか呼ばれないはずのHaf Complete割り込みコールバックが呼ばれます。手元のNculeoすべてで再現します。シリアル転送以外のペリフェラルで同様の問題が起きるか否かは調べていません。

シリアルDMA転送にサーキュラー・モードとノーマル・モードを混在させた時には問題になるかもしれません。

ノーマルDMA転送を設定する
DMA Half Completeのコールバックが呼ばれる

原因

不明です。いつからあるバグなのかも不明です。

ワークアラウンド

ユーザー・コールバック関数であるHal_UART_TxHalfCpltCallback()の中で、必ず「サーキューラー・モードに設定したシリアルポートか否か」を確認するようにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください