みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

PlatformIOでSTM32F4Discoveryのプログラムを書く

はじめに

組み込み向けの開発環境を構築する手段としてPlatformIOというものがある。

PlatformIOはPythonスクリプトで、必要に応じてクロスコンパイル用のツールチェインなどダウンロードしてくれたり、 それぞれのボード向けのスタートアップコードなんかも提供してくれる。

またVSCodeAtomなどのIDEとも連携でき、IDE上でデバッグをすることもできる。

CLionとの連携もできるがこちらはIDE上でのデバッグには対応していない様子だった。

インストール

PlatformIOはpipでインストールできる。

$ sudo pip install platformio

STM32F4Discovery向けの環境を構築

まず、次のコマンドでPlatformIOがSTM32F4Discoveryに対応しているかを確認する。

$ platformio boards | grep -i 'stm32f4disco'
disco_f407vg          STM32F407VGT6  168MHz    1MB     192KB  ST STM32F4DISCOVERY

disco_f407vgという名前で使えるらしいので、環境をつくってみる。

$ mkdir stm32f4disco_pio
$ cd stm32f4disco_pio
$ platformio init --board disco_f407vg

作成されたもの

プロジェクトを作成すると次のものが作成されます。

生成物 概要
platformio.ini プロジェクト設定ファイル
src ソースを格納するディレクト
lib プロジェクトして使用する(プライベートな)ライブラリを格納するディレクト

とりあえず何か動かしてみる

とりあえずsrc/hello.cppを次の内容で作成する。

#include <Arduino.h>

void setup() {
    Serial.begin(115200);
}

void loop() {
    Serial.print("Hello world\r\n");
    delay(1000);
}

ST-LINK経由で書き込むので、platformio.iniを次のようにする。

[env:disco_f407vg]
platform = ststm32
board = disco_f407vg
framework = arduino

upload_protocol = stlink

次のコマンドでプログラムをボードに書き込む。

$ platformio run --target upload

UARTの出力を確認

STM32F4DiscoveryとPCをUSB-TTL変換ケーブルで接続する。

ケーブル側 STM32F4Discovery
5V(赤) 5V
GND(黒) GND
TXD(緑) PA10(RX1)
RXD(白) PA9(TX1)

Ubuntuでは/dev/ttyUSB0として見えるのでminicomなどで開く。

ボードのリセットボタンを押した後、こんな感じで1秒ごとに表示されていればOK。

Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world