日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32学习之TFTLCD

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32学习之TFTLCD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

之前的STM32博客學習了從0新建工程,C語言知識復習,總線時鐘等基礎知識,現在根據手冊開始正式的開發項目,本篇博客主要是理解文檔中的TFTLCD部分的學習

學習資料來自:STM32F407最小系統板開發指南-庫函數版本_V1.1.pdf
正點原子,感謝原子哥的開源奉獻
正點原子資料下載中心

硬件:
STM32F407ZGT6
2.8 LCD MODULE
一個攝像頭

注意:
共分為3篇:

  • STM32學習之TFTLCD
  • STM32學習之FSMC
  • STM32學習之使用TFTLCD
  • 如果僅僅想要實現,可以直接去看最后一篇的使用,前邊的基礎知識可以跳過

    STM32單片機學習資料均來自 正點原子 ,僅用于學習,如有侵權請聯系我刪除
    本博客內容原創,創作不易,轉載請注明

    本文鏈接
    個人博客:https://ronglin.fun/?p=102
    PDF鏈接:見博客網站
    CSDN: https://blog.csdn.net/RongLin02/article/details/121445952

    基礎知識

    TFT-LCD 即薄膜晶體管液晶顯示器。該模塊有如下特點:

  • 320×240 的分辨率
  • 16 位真彩顯示。
  • 自帶觸摸屏,可以用來作為控制輸入。
    本章,我們以 2.8 寸(其他 3.5 寸/4.3 寸等 LCD 方法類似,請參考 2.8 的即可)的 ALIENTEK TFTLCD 模塊為例介紹,該模塊支持 65K 色顯示,顯示分辨率為 320×240,接口為 16 位的 80并口,自帶觸摸屏。
    原理圖如下:
  • ALIENTEK TFTLCD 模塊采用 16 位的并方式與外部連接(DB1–DB16)
    同時還有其信號線功能如下:

    • CS:TFTLCD 片選信號。
    • WR:向 TFTLCD 寫入數據。
    • RD:從 TFTLCD 讀取數據。
    • D[15:0]:16 位雙向數據線。
    • RST:硬復位 TFTLCD。
    • RS:命令/數據標志(0,讀寫命令;1,讀寫數據)

    8080并口

    8080 并口方式知識補充:
    首先先介紹一下模塊的 8080 并行接口,8080 并行接口的發明者是 INTEL,該總線也被廣泛應用于各類液晶顯示器,這種接口,使得 MCU 可以快速的訪問模塊數據。
    模塊的 8080 并口讀/寫的過程為:
    先根據要寫入/讀取的數據的類型,設置 DC 為高(數據)/低(命令),然后拉低片選,選中 SSD1306,接著我們根據是讀數據,還是要寫數據置 RD/WR為低,然后:
    在 RD 的上升沿, 使數據鎖存到數據線(D[7:0])上;
    在 WR 的上升沿,使數據寫入到 SSD1306 里面;
    時序圖如下:

    注意:
    在 8080 方式下讀數據操作的時候,我們有時候(例如讀顯存的時候)需要一個假讀命(Dummy Read),以使得微控制器的操作頻率和顯存的操作頻率相匹配。在讀取真正的數據之前,由一個的假讀的過程。這里的假讀,其實就是第一個讀到的字節丟棄不要,從第二個開始,才是我們真正要讀的數據。
    同時連接方式還有 4 線串行(SPI)方式 等,不再介紹。

    顯存說明

    需要說明的是,TFTLCD模塊的 RST 信號線是直接接到 STM32F4 的復位腳上,并不由軟件控制,這樣可以省下來一個IO 口。
    另外我們還需要一個背光控制線來控制 TFTLCD 的背光。所以,我們總共需要的 IO 口數目為 21 個。這里還需要注意,我們標注的 DB1-DB8,DB10-DB17,是相對于 LCD 控制 IC標注的,實際上大家可以把他們就等同于 D0~D15,這樣理解起來就比較簡單一點。
    不同尺寸的 TFTLCD 模塊,其驅動芯片有很多種類型,這里我們僅以 ILI9341 控制器為例進行介紹,其他
    的控制基本都類似,我們就不詳細闡述了。
    ILI9341 液晶控制器自帶顯存,其顯存總大小為 172800(240*320*18/8),即 18 位模式(26萬色)下的顯存量。
    在 16 位模式下,ILI9341 采用 RGB565 格式存儲顏色數據,此時 ILI9341的 18 位數據線與 MCU 的 16 位數據線以及 LCD GRAM 的對應關系如圖

    在9341中18位,其中D12和D0沒用用上,也就是說,一個色彩的顯示,是16位。
    在 MCU 的 16 位數據中,最低 5 位代表藍色,中間 6 位為綠色,最高 5 位為紅色。
    數值越大,表示該顏色越深。

    指令

    指令有點像C語言中的函數調用,當讀取的時候,輸入指令,模塊會返回參數,當寫入的時候,輸入指令,后邊跟著參數就可以將數據寫入
    注意 ILI9341 所有的指令都是 8 位的(高 8 位無效),且參數除了讀寫 GRAM (色彩數據) 的時候是 16 位,其他操作參數,都是 8 位的。
    這個和 ILI9320 等驅動器不一樣,必須加以注意。
    接下來,我們介紹一下 ILI9341 的幾個重要命令,因為 ILI9341 的命令很多,我們這里就不全部介紹了,有興趣的大家可以找到 ILI9341 的 datasheet 看看。里面對這些命令有詳細的介紹。介紹:0XD3,0X36,0X2A,0X2B,0X2C,0X2E 等 6 條指令。

    0XD3

    0XD3,這個是讀 ID4 指令,用于讀取 LCD 控制器的 ID,指令功能如圖:

    從上表可以看出,0XD3 指令后面跟了 4 個參數,最后 2 個參數,讀出來是 0X93 和 0X41,剛好是我們控制器 ILI9341 的數字部分,從而,通過該指令,即可判別所用的 LCD 驅動器是什么型號,這樣,我們的代碼,就可以根據控制器的型號去執行對應驅動 IC 的初始化代碼,從而兼容不同驅動 IC 的屏,使得一個代碼支持多款 LCD。
    參考一下網上的代碼:

    u16 ILI9341_Read_id(void) {u16 id;LCD_CMD=0xD3; //9341讀ID命令id=LCD_DATA;id=LCD_DATA; //0x00id=LCD_DATA; //0x93id<<=8;id|=LCD_DATA; //0x41return id; }

    0X36

    0X36,這是存儲訪問控制指令,可以控制 ILI9341 存儲器的讀寫方向,簡單的說,就是在連續寫 GRAM 的時候,可以控制 GRAM 指針的增長方向,從而控制顯示方式(讀 GRAM 也是一樣)。該指令如圖:

    在0X36 指令后面,緊跟一個參數,這里我們主要關注:MY、MX、MV這三個位,也就是D7 D6 D5,通過這三個位的設置,我們可以控制整個ILI9341 的全部掃描方向,如表

    MYMXMVLCD 掃描方向(GRAM 自增方式)
    000從左到右,從上到下
    100從左到右,從下到上
    010從右到左,從上到下
    110從右到左,從下到上
    001從上到下,從左到右
    011從上到下,從右到左
    101從下到上,從左到右
    111從下到上,從右到左

    這樣,我們就可以控制ILI9341的顯示方向了,比如顯示 BMP 圖片,BMP 解碼數據,就是從圖片的左下角開始,慢慢顯示到右上角,如果設置 LCD 掃描方向為從左到右,從下到上,那么我們只需要設置一次坐標,然后就不停的往 LCD 填充顏色數據即可,這樣可以大大提高顯示速度。

    0X2A

    0X2A,這是列地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置橫坐標(x 坐標),該指令如表 16.1.1.4 所示:

    在默認掃描方式時,該指令用于設置 x 坐標,該指令帶有 4 個參數,實際上是 2 個坐標值:SC 和 EC,即列地址的起始值和結束值,SC 必須小于等于 EC,且 0≤SC/EC≤239。
    一般在設置 x 坐標的時候,我們只需要帶 2 個參數即可,也就是設置 SC 即可,因為如果 EC 沒有變化,我們只需要設置一次即可(在初始化 ILI9341 的時候設置),從而提高速度。

    0X2B

    0X2B,是頁地址設置指令,在從左到右,從上到下的掃描方式(默認)下面,該指令用于設置縱坐標(y 坐標)。該指令如表 16.1.1.5 所示:

    在默認掃描方式時,該指令用于設置 y 坐標,該指令帶有 4 個參數,實際上是 2 個坐標值:SP 和 EP,即頁地址的起始值和結束值,SP 必須小于等于 EP,且 0≤SP/EP≤319。
    一般在設置y 坐標的時候,我們只需要帶 2 個參數即可,也就是設置 SP 即可,因為如果 EP 沒有變化,我們只需要設置一次即可(在初始化 ILI9341 的時候設置),從而提高速度。

    0X2C

    0X2C,該指令是寫 GRAM 指令,在發送該指令之后,我們便可以往 LCD的 GRAM 里面寫入顏色數據了,該指令支持連續寫,指令描述如表 16.1.1.6 所示:

    從上表可知,在收到指令 0X2C 之后,數據有效位寬變為 16 位,這16位代表的色彩含義見上邊的顯存說明,我們可以連續寫入 LCD GRAM 值,而 GRAM 的地址將根據 MY/MX/MV 設置的掃描方向進行自增。
    例如:假設設置的是從左到右,從上到下的掃描方式,那么設置好起始坐標(通過 SC,SP 設置)后,每寫入一個顏色值,GRAM 地址將會自動自增 1(SC++),如果碰到 EC,則回到 SC,同時 SP++,一直到坐標:EC,EP 結束,其間無需再次設置的坐標,從而大大提高寫入速度。

    0X2E

    0X2E,該指令是讀 GRAM 指令,用于讀取 ILI9341 的顯存(GRAM),該指令在 ILI9341 的數據手冊上面的描述是有誤的,真實的輸出情況如表 16.1.1.7 所示:

    該指令用于讀取 GRAM,如表 16.1.1.7 所示,ILI9341 在收到該指令后,第一次輸出的是dummy 數據,也就是無效的數據,第二次開始,讀取到的才是有效的 GRAM 數據(從坐標:SC,SP 開始),輸出規律為:每個顏色分量占 8 個位,一次輸出 2 個顏色分量。
    比如:第一次輸出是 R1G1,隨后的規律為:B1R2 G2B2 R3G3 B3R4 G4B4 R5G5… 以此類推。如果我們只需要讀取一個點的顏色值,那么只需要接收到參數 3 即可,如果要連續讀取(利用 GRAM地址自增,方法同上),那么就按照上述規律去接收顏色數據。

    以上,就是操作 ILI9341 常用的幾個指令,通過這幾個指令,我們便可以很好的控制 ILI9341顯示我們所要顯示的內容了。

    使用流程

    任何 LCD,使用流程都可以簡單的用以上流程圖表示。
    其中硬復位和初始化序列,只需要執行一次即可。
    畫點流程是:設置坐標 ->?寫 GRAM 指令 -> 寫入顏色數據,然后在 LCD 上面,我們就可以看到對應的點顯示我們寫入的顏色了。
    讀點流程為:設置坐標 ->?讀 GRAM 指令 -> 讀取顏色數據,這樣就可以獲取到對應點的顏色數據了。
    以上只是最簡單的操作,也是最常用的操作,有了這些操作,一般就可以正常使用 TFTLCD了。
    接下來我們將該模塊用來來顯示字符和數字,通過以上介紹,我們可以得出 TFTLCD 顯示

    步驟

    需要的相關設置步驟如下

  • 設置 STM32F4 與 TFTLCD 模塊相連接的 IO
    這一步,先將我們與 TFTLCD 模塊相連的 IO 口進行初始化,以便驅動 LCD。這里用到的是 FSMC,FSMC詳解在下部分。
  • 初始化 TFTLCD 模塊
    即上圖中的初始化序列,初始化序列,就是向 LCD 控制器寫入一系列的設置值(比如伽馬校準),這些初始化序列一般 LCD 供應商會提供給客戶,我們直接使用這些序列即可,不需要深入研究。在初始化之后,LCD 才可以正常使用。
  • 通過函數將字符和數字顯示到 TFTLCD 模塊上
    這一步則通過上圖左側的流程,即:設置坐標 -> 寫 GRAM 指令 -> 寫 GRAM來實現,但是這個步驟,只是一個點的處理,我們要顯示字符/數字,就必須要多次使用這個步驟,從而達到顯示字符/數字的目的,所以需要設計一個函數來實現數字/字符的顯示,之后調用該函數,就可以實現數字/字符的顯示了。
  • 總結

    這一部分主要介紹TFTLCD的基礎知識,下一篇介紹FSMC,最后就是代碼部分,未完待續,=w=

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的STM32学习之TFTLCD的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。