STM32筆記(2):使用I2C連接LCD1602

昨天將整理好的第一個STM32程式放上部落格後,有很多對於STM32想做的實作,例如如何顯示字元在LCD1602、如何控制伺服馬達、如何連接藍芽裝置HC-05等,本篇開始將陸續推出相關的練習,一來是學習如何利用STM32控制周邊的裝置,也紀錄如何連接多種裝置。這一篇要來看一下如何連接LCD1602顯示器。


上一篇提到有關 STM32F103C8T6 上有兩個 Jump,在燒錄時,要將 BOOT0 的 JUMP 跳到 1 那邊,才能進行燒錄,這種模式就是所謂的 ISP(In System Programing)模式,是指目標晶片使用 USB 或 UART 等連線方式去更新晶片内部的APROM、DataFlash和用户配置(Config)的方法[維基百科]。
有關於這兩個 BOOT0 跟 BOOT1 排列組合有 4 種狀況,但只用到 3 種,分別說明如下(X表示接不接都可以):
BOOT0BOOT1模式說明
0XFLASH從快閃記憶體啟動,這是正常的工作模式。
1 1SRAM從內置的SRAM啟動,這種模式可以用於調整測試。
10ISP從系統記憶體啟動,即所說的ISP燒錄方式。燒錄程式到系統需用這種模式。

我實際遇到的狀況是在燒錄時,要將 BOOT0 的 JUMP 跳到 1,開始進行燒錄。完成後,將 CP2102 從 USB槽拔出後,再插回去電腦,竟然 STM32 沒有如預期的像 Arduino 一樣執行程式。如果將 JUMP0,從 1 跳回 0 ,再將 CP2102 插入電腦,原來燒錄的程式就啟動執行。也就是 BOOT0 用來控制 STM32 寫入程式的狀態,可寫入的狀態(JUMP:1),執行程式的狀態(JUMP:0)。

參考其他的範例程式時,使用到 LiquidCrystal_I2C 這個函數庫,原以為可以使用原先已經安裝在 Arduino 中的程式庫(Library),直接進行編譯。但在編譯過程中會出現錯誤,應該是為了 STM32 有稍稍修改程式庫,記得要換成這個 LiquidCrystal_I2C 程式庫。安裝的方法如下一章節。

[安裝程式庫Library]

本實作需要安裝以下程式庫:
程式庫(Library)安裝方法請參考另一篇文章:  Arduino筆記:安裝 Arduino IDE 程式庫(Library)

[材料]

  • STM32F103C8T6開發板
  • USB轉TTL序列傳輸線 CP2102
  • LCD1602液晶顯示器
  • PCF8574 LCD連接模組
  • 排線 n 條

[接線圖]

CP2102STM32F103C8T6PCF8574 LCD連接模組
GNDGNDGND
3V33.3V-
RXPA9-
TXPA10-
-B6SCL
-B7SDA
5V-VCC




[程式]

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// 設定 LCD 16x2 位址: 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  lcd.begin();
  lcd.backlight();
  lcd.clear();        
  lcd.setCursor(0,0);
  lcd.print("Hello Ceiling!"); 
}

void loop()
{
  int i=0;
  lcd.setCursor(0, 1);
  lcd.print("   ");      //清除百位以下的字元
  for (i=0;i<=100;i++){
    lcd.setCursor(0, 1);
    lcd.print(i); 
    delay(1000);
  }
}

[實作結果]

LCD第一列出現"Hello Ceiling!",第二列每秒跳一個數字,直到100,再從 0 開始。

[參考資料]

Post a Comment

較新的 較舊