不管是做單片機還是做嵌入式的,要對一塊陌生芯片編程是不可避免的工作, 那首先要做的第一步必然是閱讀其datasheet,然而時序對於我們是最常見的了,只有針對時序編程,才有可能確實某些硬件工作。今天我們就來講講怎麼來編寫一個特定的時序來驅動硬件,我們就以STM32的載體了。
這裡我們選用了一款基於 ST7567 驅動芯片的 128*64 像素 FSTN(格式化超扭曲向列型) 液晶, 當中不集成任何字庫, 集成了可獨立控制的琥珀色背光板。之所以選擇這樣的液晶, 是因為其與目前可穿戴設備廣泛使用的 OLED(有機發光二極管) 具有相似的控制原理, 並且價格還比 OLED 便宜很多。
我們的引腳控制對應關係是:
PB2: 背光開關
PB3: 復位
PB4: A0, 數據或者命令選擇, “1” : 寫數據, “0” : 寫命令
-
PA5: SCL(時鐘端)
PA7: SDA(數據端)
SPI 可以有效地減少數據端口的連接, 便於布板和節約端口資源, 因此我們優先推薦。 接下來我們研究一下 LCD 的驅動程序
時序圖
要研究 LCD 的驅動程序, 首先必須瞭解其控制芯片的時序
每次需要發出的時候, 先要拉低 CS, 然後 SDA 發出字節中的最高位的bit,接著 SCLK 進行一次上升沿的變化, 然後按照上述內容依次發送其餘各位。 在最後全部發送完成數據後, A0 需要根據當前發送的是命令還是數據, 進行變化。發送完成之後, CS 需要拉高, 準備下一次字節的發送。
程序實現步驟
初始化相應的 GPIO
寫 LCD 的 SPI 寫數據程序
寫 LCD 的 SPI 寫命令程序
初始化 LCD
程序的具體實施
初始化相應的 GPIO。 在這裡, 由於我們僅僅用了單向的通訊, 即控制信號永遠從 MCU 到 LCD, 因此只需要配置上面 5 個控制引腳為推輓式輸出模式“GPIO_Mode_Out_PP”
在定義了以上的初始化程序之後, 為了便於後續的操作方便, 我們可以採用宏定義的方式來定義每個引腳的高低電平輸入輸出
編寫 LCD 的寫數據程序。 在這裡, 我們先來看下時序圖, 如果要寫命令的話, 首先需要將 A0 拉高, CS 在寫的過程中需要拉低, 接著通過 SCK 和 SDA的配合, 即可將數據完整的發送出去。 發送的時候, 以一個字節為最基本單元,從最高位開始發送, 直至最低位發送出去。
編寫 LCD 的寫命令程序。 寫命令程序和寫數據程序類似, 只需要將A0 設置成低電平即可
初始化 LCD。 初始化 LCD 的時候, 我們需要做兩件事情, 第一件事設置 LCD 的工作方式; 第二件是控制 LCD 的背光開關(打開或者關閉) 。這裡我們直接給出一般的初始化程序:
lcd 復位程序和轉為 lcd 操作編寫的延遲程序
好了,有這麼多,基本上就能跑起來了。
閱讀更多 小5嵌入式 的文章