ArduinoフレームワークでSTM32のプログラムを書いているときのUARTのやり方について紹介します。
方法
以下のように記述するとUARTを使えるようになります。
HardwareSerial uart1(PA10, PA9); //RX=PA10, TX=PA9
UARTに対応しているピンのピン番号を引数にしてHardwareSerialクラスのインスタンスを作るとUARTが使えます。
このクラスはArduinoでいうSerial
と同じなので、あとはSerial
と同じように使えます。
#include <Arduino.h>
HardwareSerial uart1(PA10,PA9);
void setup() {
uart1.begin(115200);
}
void loop() {
uart1.println("Hello, World!");
}
HardwareSerialのインスタンスを複数宣言すれば、複数のUARTが使えます。
ただし同じ系統のUARTは使えないので、UART〇の〇の数字が異なるものを使用してください。
注意点
STM32では、大体一つのUARTに対してTXとRXがそれぞれ複数のピン用意されているのですが、どのTXとRXの組み合わせでも使えるわけではなく、同じ系統のUARTのTXとRXでも使えない組み合わせがあります。
これはSTM32全体の問題なのかArduinoフレームワークの問題なのかPlatformIOの問題なのかよくわからないのですが、PlatformIOのArduinoフレームワークで開発しようと考えている人は、基板で実装したりする前にNucleoボード等で確認してみることをおすすめします。
基本的にピンが隣り合っている組み合わせだとうまくいって、そうでない場合はうまくいかないようです。
もし原因や解決策のわかる人がいらっしゃいましたら教えていただきたいです。