STM32CubeMX 4.7.1でちょっと嵌る

stm32cubemx471

アップデートチェックでプログラム本体STM32CubeMX4.7.1とstm32f0x用ライブラリSTM32Cube_FW_F0_V1.2.0が使用可能となっていたのでいつもの癖で「とりあえずアップデート」をして少し嵌ってしまった。

STM32CubeMX 4.7.1

TrueSTUDIO用のプロジェクトを生成するとハングアップしてしまった。
JDEはMDK-ARMのプロジェクトもインポート出来るようにしていたのでそちらでチェックすると取りあえずはOKの模様。
これまで使っていたプロジェクトを読み込ませたところプログラムが動作しなくなったので深刻なバグがあるのかと疑ったがコンフィグレーションのマイグレーションで一部エラーが生じていただけでADCとSPIを再設定したら動作は正常になった。

STM32Cube_FW_F0_V1.2.0

製作中のプログラムにUARTの受信が止まるというバグがあるのでライブラリアップデートで治るかと期待したがV1.1.0と認識できる範囲で違いはなかった。

STM32Cubeのライブラリは簡単に使えるようになっている一方「痒い所に手が届かない」面もある。
受信用DMAをCircularモードにしてDMAの書き込み先をリングバッファにした受信関数を作りたかったのだが標準のAPIだけではうまくいかなかった。
結局ちょっとした工夫でDMAの受信完了コールバック関数を無効にして割り込みを使わないDMAだけの受信関数を作ることが出来た。

====================================================================================

CirculerモードでDMAは連続で動作するが
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
の中で転送数Sizeの後でDMAを停止する関数をセットしているのでそれをリセットする。
(例)
r = HAL_UART_Receive_DMA(&huart2, (uint8_t *)rx2.buf, UART_RXSIZE);
huart2.hdmarx->XferCpltCallback = NULL;
return r;
& 受信完了コールバック関数は無効にする