STM32 PlatformIOでMbedのTextLCDを動かしてみる

STM32 PlatformIOでMbedのTextLCDを動かしてみる

今回は VSCode + PlatformIO IDE で Mbed の TextLCD を動かしてみました。

PC:Windows10 OS
Board: STM32Nucleo-F401RE
Visual Studio Code Version 1.47.2
PlatformIO IDE Version 1.10.0

概要

PlatformIOでは Mbedもサポートされているということで、Mbed の TextLCD を動かしてみました。

環境が構築できてさえいれば、確認作業にかかる時間はさほどでもありません。

環境構築がまだの方は STM32 PlatformIOでデバッグしてみる を参考にしてトライしてみてください。

プロジェクトを構築する

まず作業ディレクトリをつくります。
C:\の直下に pio というディレクトリを作成してください。

次に Visual Studio Code (VSCode) を起動します。
少し待つと PlatformIO も立ち上がってきます。

宇宙人きたぁ~

Quick Access の +New Project (赤枠部分)をクリックします。

Project Wizard で

Name : F401TextLCD
Board : ST Nucleo F401RE
Framework: Mbed

としてその下の Use default location のチェックをはずし、その下の赤枠部分を作業ディレクトリの C:/PIO に変更し、右下の Finishボタンを押します。
Wizardが完了するまで、少し時間がかかります。

TextLCDとは

Mbedでは、いろいろな方がプログラムをつくって公開しています。

TextLCDはキャラクタ表示タイプのLCDにアクセスするためのクラスです。

TextLCDに関するプログラムは、いろいろな方が公開されているようです。

今回は こちら からプログラムをダウンロードしてみました。

比較的最近のもので、ダウンロード数が多かったものに決めました。

Mbedを使ってプログラムすることを考えられている方は Mbedのコード の中を探索してみるのも楽しいと思います。

今回使うLCD

今回使ったLCDは こちら です。

バックライトの電流が多いので、Nucleoボードから供給するのは厳しいかも知れません。

今回は文字の表示が目的なので、バックライトは省略します。

接続

制御用にはGPIOの出力ピンが6本必要になります。

今回は下表のように接続してみました。

コーディングする

WORKSPACE の F401TextLCD >Src main.cpp をクリックし以下のコードを貼りつけます。

#include 

#include "TextLCD.h"

int main() {

  // put your setup code here, to run once:

  TextLCD lcd(PC_9, PC_8, PB_8, PC_6, PB_9, PC_5, TextLCD::LCD20x4);

  lcd.locate(0, 0);

  lcd.printf("Hello everyone.^^");

  lcd.locate(0, 1);

  lcd.printf("Welcome to the world of TextLCD.");

  lcd.locate(0, 3);

  lcd.printf("My board is F401RE.");

  lcd.cls();  

貼り付けた後に Ctrl + Sキーを押してファイルを保存しておきます。

Run – Start Debugging を選択し、ビルドします。

プログラムを実行する

Start Debugging を選択したことで、以下のツールバーが画面上に出てきました。

左から2番目の ▶ ボタンを押すか F5キーを押すとプログラムが走ります。

LCDに文字が表示されれば成功です。

コードと接続の概要

TextLCD.h を見て頂ければわかりますが、コンストラクタでピンの指定を行います。

引数の左から RS, E, DB4, DB5, DB6, DB7 につないだGPIOピンを指定します。

今回は20×4のLCDを使うので最後の引数には TextLCD::LCD20x4 を指定します。

LCDモジュールの 5番ピンは Read/Write 信号で Write時には L にします。説明書にはその論理が書かれていませんけど・・・

GNDにつないで Write専用にしています。

busyビットを読む場合に Read機能が必要になるのですが、時間待ちをすることでその処理を省略しています。

それから DB0-3 の4ビットはつながずに、4ビットのバス接続で使っています。

locate() は表示位置の設定で、引数は左から列、行です。
printf() は表示、cls() はクリアスクリーンです。

皆さまの環境では、うまく表示できましたか?

最後に表示した画像を貼っておきます。

お疲れさまでした。

PlatformIOカテゴリの最新記事