コンテンツへスキップ

DSP空挺団

CubeIDEが生成するコードでDMAによるシリアル転送ができない

by

メモです。

  • 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の順序を変更します。こうしておけば、再度コード生成してもバグが戻りません。

関数生成順序の変更

その他

この問題は以前修正されましたが、再度発生しました。

コメントする コメントをキャンセル

Wordpress Hashcash needs javascript to work, but your browser has javascript disabled. Your comment will be queued in Akismet!

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

AltStyle によって変換されたページ (->オリジナル) /