2021年05月01日

STM32マイコンUART拡張機能

STM32F7、L4、H7シリーズではUART通信をする際に非常に便利な拡張機能があります。今回はUART拡張機能について紹介します。例えばUARTを利用する際に基板のTXとRXを間違えて逆転させてしまったり(回路上でTXとRXをクロスさせることを忘れていた)、フォトカプラを接続するので論理を逆転させたい(通常は論理反転のバッファICやトランジスタ等で追加ハードウェアで論理反転させる)、DMA受信時のエラー処理を無効にしたい(デフォルトではSTM32のUART受信でフレームエラー等が発生するとクリアするまで受信できない)といったことが多々あると思います。そのような場合にUART拡張機能を利用することでハードウェア追加や修正なしにソフトウェア側の設定変更のみで切り替えることが可能です。

UART拡張機能は下記の通りです。

名称機能
UART_ADVFEATURE_TXINVERTTX論理反転
UART_ADVFEATURE_RXINVERTRX論理反転
UART_ADVFEATURE_DATAINVERTデータビット論理反転
UART_ADVFEATURE_SWAPTX、RX入れ替え
UART_ADVFEATURE_RXOVERRUNDISABLE受信エラー無効
UART_ADVFEATURE_DMADISABLEONERRORDMA受信エラー無効
UART_ADVFEATURE_AUTOBAUDRATEオートボーレート有効
UART_ADVFEATURE_MSBFIRSTMSB有効


UART拡張機能の定義はstm32XX_hal_uart.hで下記のように定義されています。

/*!< No advanced feature initialization */
#define UART_ADVFEATURE_NO_INIT 0x00000000U

/*!< TX pin active level inversion */
#define UART_ADVFEATURE_TXINVERT_INIT 0x00000001U

/*!< RX pin active level inversion */
#define UART_ADVFEATURE_RXINVERT_INIT 0x00000002U

/*!< Binary data inversion */
#define UART_ADVFEATURE_DATAINVERT_INIT 0x00000004U

/*!< TX/RX pins swap */
#define UART_ADVFEATURE_SWAP_INIT 0x00000008U

/*!< RX overrun disable */
#define UART_ADVFEATURE_RXOVERRUNDISABLE_INIT 0x00000010U

/*!< DMA disable on Reception Error */
#define UART_ADVFEATURE_DMADISABLEONERROR_INIT 0x00000020U

/*!< Auto Baud rate detection initialization */
#define UART_ADVFEATURE_AUTOBAUDRATE_INIT 0x00000040U

/*!< Most significant bit sent/received first */
#define UART_ADVFEATURE_MSBFIRST_INIT 0x00000080U


実際に使用する場合はCubeMXで設定するか、下記のコードをUART初期化関数MX_USARTX_UART_Initに追記して使用します。CubeMXで設定する場合は下記のようにUARTの設定項目のAdvanced Featuresから有効/無効を設定します。

uart.jpg

コード上から修正する場合はデフォルトでUART_ADVFEATURE_NO_INITとなっているため、必要な項目を追加して各項目を有効化して使用します。

デフォルト
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;

追加例
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT | UART_ADVFEATURE_SWAP_INIT;
huart1.AdvancedInit.TxPinLevelInvert = UART_ADVFEATURE_TXINV_ENABLE;
huart1.AdvancedInit.Swap = UART_ADVFEATURE_SWAP_ENABLE;

STM32F7、L4、H7シリーズのみ対応しているのが残念ですが、UART拡張機能の中でもTXとRXの入れ替え機能は非常に便利だと思いました。TXとRXをクロスさせて回路設計することを忘れていたり、クロスさせたはずが回路上で間違えていたり、クロスケーブルがなく、ストレートケーブルしか準備できていなかったり、UARTのTX、RX絡みでよくあるトラブルがソフトウェア上で解決できるのは非常に便利です。
posted by Crescent at 00:00| Comment(0) | 組込ソフト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。