どのマイクロコントローラープロジェクトでも、ディスプレイユニットとインターフェースをとることで、プロジェクトがはるかに簡単になり、ユーザーが操作しやすくなります。マイクロコントローラで最も一般的に使用されるディスプレイユニットは、16×2英数字ディスプレイです。これらのタイプの表示は、ユーザーに重要な情報を表示するのに役立つだけでなく、プロジェクトの初期開発段階でデバッグツールとしても機能します。したがって、このチュートリアルでは、16×2LCDディスプレイをSTM32F103C8T6STM32 開発ボードとインターフェイスさせ、ArduinoIDEを使用してプログラムする方法を学習します。Arduinoに精通している人にとって、このチュートリアルはどちらも非常に似ているため、簡単な説明になります。また、STM32 Blue Pill Boardの詳細については、入門チュートリアルに従ってください。
必要な材料
- STM32ブルーピル開発ボード
- 16×2LCDディスプレイ
- FTDIプログラマー
- 接続線
- LCD
16×2ドットマトリックスLCDディスプレイの簡単な紹介
先に述べたように、Energia IDEは、インターフェイスを簡単にする美しいライブラリを提供するため、ディスプレイモジュールについて何も知る必要はありません。しかし、私たちが何を使っているかを示すのは面白くなかったでしょう!
16×2という名前は、ディスプレイに16列と2行があり、これらを合わせて(16 * 2)32ボックスを形成することを意味します。下の写真では、1つのボックスは次のようになります。
1つのボックスには40ピクセル(ドット)があり、マトリックスの順序は5行8列で、これらの40ピクセルが一緒になって1つの文字を形成します。同様に、すべてのボックスを使用して32文字を表示できます。次に、ピン配置を見てみましょう。
LCDには、上記のように合計16個のピンがあり、次のように4つのグループに分類できます。
ソースピン(1、2、および3): これらのピンは、ディスプレイの電力およびコントラストレベルを供給します。
制御ピン(4、5、および6): これらのピンは、LCDインターフェイスICのレジスタを設定/制御します(詳細については、以下のリンクを参照してください)。
データ/コマンドピン(7〜14): これらのピンは、LCDに表示する情報のデータを提供します。
LEDピン(15および16): これらのピンは、必要に応じてLCDのバックライトを点灯させるために使用されます(オプション)。
これらすべての16ピンのうち、これらのLCDディスプレイについて詳しく知りたい場合は、LCDの適切な動作に必須の10ピンのみを使用してください。この16x2LCDの記事にジャンプしてください。
回路図と接続
16 * 2ドットマトリックスLCDとSTM32F103C8T6STM32 ブルーピルボードを接続するための回路図を以下に示します。それはFritzingソフトウェアを使用して作られています。
ご覧のとおり、完全な接続はブレッドボードを介して行われます。STM32マイクロコントローラーをプログラムするにはFTDIボードが必要です。前のチュートリアルと同様に、FTDIボードをSTM32に配線し、FDTIプログラマーのVccピンとグランドピンをそれぞれSTM32の5Vピンとグランドピンに接続しました。どちらも+ 5Vを受け入れることができるため、これはSTM32ボードとLCDに電力を供給するために使用されます。FTDIボードのRxピンとTxピンはSTM32のA9ピンとA10ピンに接続されているため、ブートローダーなしでボードを直接プログラムできます。
次に、LCDをSTM32ボードに接続する必要があります。我々は、使用しようとしている4ビットモードでLCDをに示すように、STM32ボードに、我々は、ピン(DB7にDB4)と2つの制御ピン(RSとEN)のビット4つのデータを接続しなければならないので、STM32F103C8T6 LCDインターフェース回路上の図。さらに、以下の表は、接続を確立するのに役立ちます。
LCDピン番号 |
LCDピン名 |
STM32ピン名 |
1 |
グラウンド(Gnd) |
地面(G) |
2 |
VCC |
5V |
3 |
VEE |
地面(G) |
4 |
レジスタ選択(RS) |
PB11 |
5 |
読み取り/書き込み(RW) |
地面(G) |
6 |
有効(EN) |
PB10 |
7 |
データビット0(DB0) |
接続なし(NC) |
8 |
データビット1(DB1) |
接続なし(NC) |
9 |
データビット2(DB2) |
接続なし(NC) |
10 |
データビット3(DB3) |
接続なし(NC) |
11 |
データビット4(DB4) |
PB0 |
12 |
データビット5(DB5) |
PB1 |
13 |
データビット6(DB6) |
PC13 |
14 |
データビット7(DB7) |
PC14 |
15 |
LEDポジティブ |
5V |
16 |
LEDネガティブ |
地面(G) |
接続が完了したら、ArduinoIDEを開いてプログラミングを開始できます。
Arduinoを使用したLCD用STM32のプログラミング
このチュートリアルで説明したように、ArduinoIDEを使用してSTM32マイクロコントローラーをプログラムします。ただし、デフォルトではArduino IDEにはSTM32ボードがインストールされていないため、パッケージをダウンロードしてArduinoIDEを準備する必要があります。これは、ArduinoIDEを使用してSTM32F103C8T6を使い始めた前のチュートリアルで行ったこととまったく同じです。したがって、必要なパッケージをインストールしていない場合は、このチュートリアルにフォールバックし、ここに進む前にそれに従ってください。
STM32ボードがArduinoIDEにインストールされると、プログラミングを開始できます。プログラムはArduinoボードのプログラムと非常に似ていますが、STM32とArduinoでは表記が異なるため、変更されるのはピン名だけです。完全なプログラムはこのページの最後にありますが、プログラムを説明するために、以下に示すように、プログラムを意味のある小さなスニペットに分割しました。
マイクロコントローラーのプログラミングにArduinoを使用することの顕著な利点の1つは、Arduinoがほぼすべての有名なセンサーとアクチュエーター用の既製のライブラリーを備えていることです。そこで、ここでは、プログラミングを非常に簡単にするLCDライブラリを含めることからプログラムを開始します。
#include
次の行では、LCDディスプレイ制御ラインとデータラインを接続したSTM32のGPIOピンを指定する必要があります。これを行うには、ハードウェアを確認する必要があります。簡単にするために、STM32のGPIOピンに対するLCDのピン名をリストした上部の表を参照することもできます。ピンについて言及した後、 LiquidCrystal 関数を使用してLCDを初期化できます。また、以下に示すように、LCDに「 lcd 」という名前を付けます。
const int rs = PB11、en = PB10、d4 = PB0、d5 = PB1、d6 = PC13、d7 = PC14; // LCDでピン名を言及すると、 LiquidCrystal lcd (rs、en、d4、d5、d6、d7)に接続されます。// LCDを初期化します
次に、 セットアップ 関数の内部に 進み ます。ここではまず、使用しているLCDのタイプについて説明します。 16 * 2 LCD なので 、 lcd.begin(16,2) という行を使用し ます。 void setup 関数内のコードは、一度だけ実行され ます 。そのため、これを使用して、画面に2秒間表示された後、クリアされるイントロテキストを表示します。テキストを表示する必要がある位置について言及するには、関数 lcd.setcursor を使用し、テキストを印刷するには、 lcd.print 関数を使用します。たとえば、 lcd.setCursor(0,0) は、「 インターフェイスLCD 」と関数 lcd.setCursor(0,1)を出力 する最初の行と最初の列にカーソルを設定します。 カーソルを2行1列目に移動し、「 CircuitDigest 」という行を 出力し ます。
void setup(){lcd.begin(16、2); // 16 * 2 LCDを使用していますlcd.setCursor(0、0); //最初の行の最初の列lcd.print( "Interfaceing LCD"); //このlcd.setCursor(0、1);を出力します // 2番目の行の最初の列でlcd.print( "-CircuitDigest"); //このdelay(2000);を出力します // 2秒待つlcd.clear(); //画面をクリアします}
イントロテキストを表示した後、ユーザーがイントロメッセージを読めるように、遅延を作成してプログラムを2秒間保持します。この遅延は、line delay(2000) によって作成されます。ここで、2000はミル秒単位の遅延値です。遅延後、LCD上のすべてのテキストを削除してLCDをクリアする lcd.clear() 関数を使用してLCDをクリアします。
最後に、 voidループ 内で、最初の行に「STM32 –Blue Pill」を表示し、2番目の行に秒の値を表示します。secondの値は、 millis() 関数から取得できます。 ミリは、() MCUの電源が入っている時からインクリメント権利を取得し、タイマーです。値はミリ秒の形式であるため、LCDに表示する前に1000で除算します。
void loop(){ lcd.setCursor(0、0); //最初の行の最初の列 lcd.print( "STM32 -Blue Pill"); //この lcd.setCursor(0、1);を出力します // 2番目の行の最初の列で lcd.print(millis()/ 1000); //秒の値を出力します }
プログラムをSTM32F103C8T6にアップロードする
上記の段落で説明したように、コードがアップロードされるとすぐに出力に気付くことができるはずです。ただし、ボードはまだプログラミングモードであるため、次にボードの電源を入れたときには、このプログラムは機能しません。したがって、プログラムがアップロードされたら、以下に示すように、ブート0のジャンパーを0の位置に戻す必要があります。また、プログラムはすでにSTM32ボードにアップロードされているため、FTDIボードは不要であり、セットアップ全体は、以下に示すように、STM32ボードのマイクロUSBポートから電力を供給できます。
これは、STM32ボードでLCDディスプレイを使用するのに役立つ単純なインターフェイスプロジェクトですが、さらにこれを使用してクールなプロジェクトを構築することもできます。チュートリアルを理解し、そこから何か役立つことを学んだことを願っています。動作させる際に問題が発生した場合は、コメントセクションを使用して問題を投稿するか、フォーラムを使用してその他の技術的な質問を行ってください。STM32を使用したLCDディスプレイの完全な動作は、以下のビデオとしてもご覧いただけます。