メモです。
- CubeIDE 1.7.0
- Ubuntu 20.04 LTS
- STM32F091, F446, F722, F746, G070, G431, H743, L412
症状
HAL_UART_Transmit_DMA() を実行しても HAL_UART_TxCpltCallback() が呼ばれません。
原因
CubeIDEのバグです。main()の中で以下のコードが実行されますが、このコード列は間違っています。
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART3_UART_Init(); MX_DMA_Init();
正しくは以下の順序です。
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_USART3_UART_Init();
ワークアラウンド
ソースコードを編集して正しい順序に正します。しかし、この方法では再度デバイス・コンフィギュレーション・ツールからコード生成をすると、元に戻ります。
そこでデバイス・コンフィギュレーション・ツールのプロジェクトマネージャーで、Generated Function Callの順序を変更します。こうしておけば、再度コード生成してもバグが戻りません。
その他
この問題は以前修正されましたが、再度発生しました。