皆さま こんにちは。
今回から LL を使ってUARTによる通信をおこなってみます。
投稿時の開発環境を記しておきます。
PC:Windows10 OS
IDE: STM32CubeIDE Version1.5.0
Configurator: STM32CubeMX Version6.1.0
Board: STM32Nucleo-F401RE
プロジェクトを作成する
IDEを起動し、File- New – STM32 Project を選択し、Target Selection ウィンドウが出たら Board Selector タブを選択し Boards List から NUCLEO-F401RE を選択し Next ボタンを押します。
Project 名に F401UartLL と入力し、Finishボタンを押します。
Initialize all peripherals with their default Mode ? と聞いてくるので Yesを押します。
UARTをLLで使う準備をする
Project Managerタブを選択し Advanced Settings の USART を HAL (初期値)から LL に変更します。(コンボボックスで選択する)
HALの部分をクリックするとコンボボックスのリストが表示されるので、LLを選択します。
Project – Build All を選択します。
Do you want Generate Code ? と聞いてくるのでRemenber my decision のチェックボックスにチェックを入れて OKを押します。
This action can be associated with C/C++ perspective.Do you want to open this perspective now?
と聞いてくることがあれば Remenber my decision のチェックボックスにチェックを入れて Yesを押します。
LLの初期化コードを確認する
main.cに MX_USART2_UART_Init()という関数がつくられています。
その中を見ると HAL_ではなく LL_から始まる関数がつくられていることが確認できます。
UARTのパラメーターを変更する
Project Explorer から F401UartLL.ioc をダブルクリックして GUIの画面を開きます。
Pinout & Configuration – Connectivity – USART2 を選択します。
Modeのところは Asynchronus が選択されていて使える状態になっています。(使わない場合は Disable)
今回はパリティを使ってみましょう。
Configuration – Parameter Settings のところで以下のように設定します。
(デフォルトからの変更はParityを None -> Even にするだけです)
Baud Rate : 115200
Word Length : 8bits
Parity : Even
Stop Bits : 1
ついでに割り込みの設定をしておく
Configuration – NVIC Settings の USART2 global interrupt の Enabled にチェックを入れます。
ここで一度ビルドしてコードを確認してみましょう。
Project – Build All を選択します。
以下のコードはMX_USART2_UART_Init()関数の一部分です。
NVIC_SetPriority(USART2_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
NVIC_EnableIRQ(USART2_IRQn);
.
.
.
USART_InitStruct.BaudRate = 115200;
USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
USART_InitStruct.Parity = LL_USART_PARITY_EVEN;
NVIC_SetPriority() : この関数は割り込みの優先順位を設定します。
NVIC_EnableIRQ(USART2_IRQn) : この関数はUSART2の割り込みを有効にします。
これら2つの関数は割り込みを有効にしたことで追加されます。
その後に、通信パラメーターの設定が行われています。
BaudRate : 通信速度です。単位はbps(b/s)でビットパーセカンドですから1秒間のビット数です。
DataWidth : データ長です。
StopBits : ストップビットです。
Parity : パリティビットです。 LL_USART_PARITY_NON, ODD, EVEN のいずれかを設定します。
LLを使って細かい制御をしてみたいので、今回はパリティも使ってみることにしました。
それぞれの意味は以下の通りです。
NON : なし
ODD : 奇数
EVEN : 偶数
ここで注意することがあります。STM32の場合、このデータ長にはParityビット(1ビット)も含まれるということです。
私か過去に使って来たSTM32以外のマイコンでは、このデータ長にパリティは含まれていませんでした。
※従って相手側(今回はパソコン)の設定は以下の通り(データ長は7であることに注意)になりますので、気をつけてください。
通信速度:115200
データ長:7
パリティ:even
ストップビット:1bit
(通信仕様としてはデータ7bit、偶数パリティになるが、その仕様に合わせるためにSTM32マイコン側ではデータ8bit、偶数パリティを設定する必要がある ということ)
今回はこのへんで。
お疲れさまでした。
コメントを書く