メモです。
- CubeIDE 1.7.0
- Ubuntu 20.04 LTS
- STM32F091, F446, F722, F746, G070, G431, H743, L412
症状
先に報告した「CubeIDEが生成するコードでDMAによるシリアル転送ができない」問題のワークアラウンドを適用すると、シリアルに対してDMA転送ができるようになります。しかしながら、DMAをノーマル・モードに設定しているにもかかわらず、サーキュラー・モードでしか呼ばれないはずのHaf Complete割り込みコールバックが呼ばれます。手元のNculeoすべてで再現します。シリアル転送以外のペリフェラルで同様の問題が起きるか否かは調べていません。
シリアルDMA転送にサーキュラー・モードとノーマル・モードを混在させた時には問題になるかもしれません。
原因
不明です。いつからあるバグなのかも不明です。
ワークアラウンド
ユーザー・コールバック関数であるHal_UART_TxHalfCpltCallback()の中で、必ず「サーキューラー・モードに設定したシリアルポートか否か」を確認するようにします。