STM32|基於 SPI 單向發送的 12864 驅動程序

STM32|基於 SPI 單向發送的 12864 驅動程序

不管是做單片機還是做嵌入式的,要對一塊陌生芯片編程是不可避免的工作, 那首先要做的第一步必然是閱讀其datasheet,然而時序對於我們是最常見的了,只有針對時序編程,才有可能確實某些硬件工作。今天我們就來講講怎麼來編寫一個特定的時序來驅動硬件,我們就以STM32的載體了。

這裡我們選用了一款基於 ST7567 驅動芯片的 128*64 像素 FSTN(格式化超扭曲向列型) 液晶, 當中不集成任何字庫, 集成了可獨立控制的琥珀色背光板。之所以選擇這樣的液晶, 是因為其與目前可穿戴設備廣泛使用的 OLED(有機發光二極管) 具有相似的控制原理, 並且價格還比 OLED 便宜很多。

我們的引腳控制對應關係是:

  • PB2: 背光開關

  • PB3: 復位

  • PB4: A0, 數據或者命令選擇, “1” : 寫數據, “0” : 寫命令

  • PA5: SCL(時鐘端)

  • PA7: SDA(數據端)

SPI 可以有效地減少數據端口的連接, 便於布板和節約端口資源, 因此我們優先推薦。 接下來我們研究一下 LCD 的驅動程序

時序圖

要研究 LCD 的驅動程序, 首先必須瞭解其控制芯片的時序

STM32|基於 SPI 單向發送的 12864 驅動程序

每次需要發出的時候, 先要拉低 CS, 然後 SDA 發出字節中的最高位的bit,接著 SCLK 進行一次上升沿的變化, 然後按照上述內容依次發送其餘各位。 在最後全部發送完成數據後, A0 需要根據當前發送的是命令還是數據, 進行變化。發送完成之後, CS 需要拉高, 準備下一次字節的發送。

程序實現步驟

  • 初始化相應的 GPIO

  • 寫 LCD 的 SPI 寫數據程序

  • 寫 LCD 的 SPI 寫命令程序

  • 初始化 LCD

程序的具體實施

  • 初始化相應的 GPIO。 在這裡, 由於我們僅僅用了單向的通訊, 即控制信號永遠從 MCU 到 LCD, 因此只需要配置上面 5 個控制引腳為推輓式輸出模式“GPIO_Mode_Out_PP”

STM32|基於 SPI 單向發送的 12864 驅動程序

在定義了以上的初始化程序之後, 為了便於後續的操作方便, 我們可以採用宏定義的方式來定義每個引腳的高低電平輸入輸出

STM32|基於 SPI 單向發送的 12864 驅動程序

  • 編寫 LCD 的寫數據程序。 在這裡, 我們先來看下時序圖, 如果要寫命令的話, 首先需要將 A0 拉高, CS 在寫的過程中需要拉低, 接著通過 SCK 和 SDA的配合, 即可將數據完整的發送出去。 發送的時候, 以一個字節為最基本單元,從最高位開始發送, 直至最低位發送出去。

STM32|基於 SPI 單向發送的 12864 驅動程序

  • 編寫 LCD 的寫命令程序。 寫命令程序和寫數據程序類似, 只需要將A0 設置成低電平即可

STM32|基於 SPI 單向發送的 12864 驅動程序

  • 初始化 LCD。 初始化 LCD 的時候, 我們需要做兩件事情, 第一件事設置 LCD 的工作方式; 第二件是控制 LCD 的背光開關(打開或者關閉) 。這裡我們直接給出一般的初始化程序:

STM32|基於 SPI 單向發送的 12864 驅動程序

  • lcd 復位程序和轉為 lcd 操作編寫的延遲程序

STM32|基於 SPI 單向發送的 12864 驅動程序

好了,有這麼多,基本上就能跑起來了。


分享到:


相關文章: