I2C経由のSTM32およびLCD



将来使用するためには、2004年の画面でI2C STM32マイクロコントローラーを使用して接続する必要がありましたが、ネットワーク上で同様のソリューションが見つからなかったため、ここで公開します。 このレシピは、画面1602にも適しています。さらにカットの下。 (注意、写真)。



息子が購入したおもちゃ箱は不良品であることが判明し、1回おきに機能しました。 内部を作り直すというアイデアがあり、マイクロコントローラを選択した瞬間は、STM32に関するRaJaの記事の出版と一致しました[ 1 ]。 少し見積もり、価格を比較して、STM32 + LCD2004 + I2C = ArduinoMega(キーボード、スピーカー、バーコード入力デバイス、およびスクリーンを実装する必要があるため、マイクロコントローラーの各出力がカウントされるため)最初のセットを選択しました。



購入が行われ、待つ時間でした。 ファームウェア用のUSB-USARTアダプターも購入しました。

何をどこで購入するか。
  1. STM32F103C8T6
  2. 2004 LCD HD44780 キリル文字なしで判明しました。 画面でロシア語が必要な場合は、検索するときにこの機能に注意してください。
  3. IIC / I2C / TWI / SP I Arduino 1602LCDディスプレイ用シリアルインターフェイスボードモジュールポート説明は2004と互換性があります。しかし、同様のことができると思います。
  4. ファームウェアおよびデバッグ用のUSB to UART TTL CP2012 。 サポートされている他のファームウェアおよびデバッグ方法を使用できますが、このオプションは最も安価です。




私が使用するプログラミング、ファームウェア、デバッグの手段:

  1. EmBlocks
  2. 元のサイトのフラッシャー: STM32およびSTM8フラッシュローダーデモンストレーター
  3. USB2UARTを介してMKから信号を読み取るためのターミナル: ターミナルv1.91b ただし、Putty(接続->シリアル)も適しています。


マイクロコントローラーを受け取った後、私はLEDで遊んでみましたが、それは判明しました。 そして、画面をMKに接続しようとして数時間かかりました。 このすべてを説明するのは退屈です。私が出会ったレーキを思い出そうと思います。



接続を最初に説明します。 STM32を使用して回路を描画するいくつかの場所(ほとんどがコード)で説明するときは、奇妙で、何をどのように接続するかを推測します。

写真の接続を接続します(クリックして拡大します)。



この接続は、STM32F103C8に関連しています。 他のMKボードについては、データシートのI2C1接続ピンを確認してください。

USBへのUSARTアダプター。 ここは明らかです。 次に-USARTからSTM32をminiUSBコネクタUSART1の近くの出力に接続します。 TXからRX、したがってRXからTX。 USARTに3v3ピンがあり、そこからMKに電力を供給しました。 ファームウェアと動作モードの切り替え中に便利にオフにするために、アースを個別に接続しました。 I2Cをスクリーンにはんだ付けしました(ebayにはんだ付けされたI2Cのスクリーンもあります)。 I2Cおよび画面の電力は、USARTの3v3 MKまたは5Vから取得されます。 以下に、さまざまな供給電圧のコントラスト設定について書きました。 次に:I2CからのSCLはPB6に、SDAはI2CからPB7に接続します。 このデバイスを単独で使用する場合、SCLとSDAに電力を供給する必要はありません。



最初のレーキはUSARTでした。 これをデバッグに使用しました。ここで示したコードでは、それを使用した作業の行はコメント化されています。 しかし、彼は問題を解決しませんでした。 最初の文字を送信する前に、コンピューターとマイクロコントローラーの間で同期が行われていないようです。 さらに、例[ 4 ]のコードを使用すると、MKは結果のテキストを完全に複製しますが、書き込むことはできません。 各文字の後に遅延(500)を追加することで、行出力のデバッグに最も受け入れやすいものを実現しました。



次に、I2Cで作業を実装しようとしました。 例[ 3 ]からコードを取り出し、MKの一時停止に関するコメントに注意を引き、ソースを分析しました。コメントの作成者と同様に、デバイスアドレスを左にシフトする必要があることがわかりました。



//http://microtechnics.ru/stm32-ispolzovanie-i2c/#comment-8109 I2C_Send7bitAddress(I2Cx, slaveAddress<<1, transmissionDirection);
      
      





コードを挿入して実行しようとしました。 プログラムは、バスのリリースを待つ瞬間にハングアップしました。



 while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
      
      





I2Cデバイスのアドレスにすくいがあります。 売り手の説明から判断すると、アドレスは0x20でした。 ここで私は無駄に15分を失いましたが、I2Cアダプターの異なるモデルの説明を読んだ後、記事[ 5 ]でromanvlが引用したリンク[ 6 ]は、最新のモデルに注意を引き、アドレスを0x27に変更しようとしました。 すべてがうまくいきました。 結論は次のとおりです。A0A1 A2がアダプターにはんだ付けされている場合、アドレスははんだ付けではなく0x20-0x27です。

比較する:



次は画面です。 I2Cアダプター( アダプターチップデータシート-2.5〜6 V)のように、3.3ボルトでも正常に動作することが判明しました。 しかし、最初に、5Vからチェックしました。 そして、コントラストは最大にねじれていました。 その結果、プログラムを起動した結果、画面が完全にいっぱいになりました。 私は動揺し、コードを選び続けました。 しかし、30分後に目が覚め、開発の犯人が駆けつけたとき、私は彼にスクリーンを見せ、偶然そこから何かが書かれていることを側面から斜めから見ました。 この理由は、不正確なコントラスト調整です。 (申し訳ありませんが、ここで明白なことを説明した場合、これを知らなかった人がいるかもしれません。)

何も見えない

同じことですが、斜めに



5V電源では、コントラストをわずかに下げる必要があります。 また、3.3Vを最大に設定すると、5Vからは設定に何も表示されません。 結果は投稿の最初の写真に示されています。 私はロシア語なしであることが判明し、文字をスクロールして見ました。 私は最大8個の自分のキャラクターを定義できることを知らずに、しみを描画しようとしました。しみ12のために書きました。中国語から似たようなものを拾い上げ、うまくいったようです。



結果を達成するために、ArduinaのライブラリSTM32_LCD_I2Cを書き直したため、コードはgihabに表示されます。



使用した材料:

  1. マイクロコントローラーを選択する理由: STM32対Arduino
  2. 遅延の実装ここから来ました: STM32 I2C EEPROM24XX
  3. I2C STM32に関する記事 I2Cを使用します。 microtechnics.ru/stm32-ispolzovanie-i2c シフトについてのコメントもあります。それなしでは、議論しているようなレーキをキャッチするでしょう。
  4. USART STM32の使用例 USART パート4-ファイナル
  5. Arduino-I2C LCD画面のワイヤ数と2本のワイヤのRTCクロックを減らします
  6. I2C / TWIインターフェイスを備えたLCDディスプレイ(青と黄色)
  7. 外部デバイスを備えたSTM32のロジックを理解するには、 周辺機器STM32F10xを使用するためのクイックスタートガイドをご覧ください


ご清聴ありがとうございました。



All Articles