LTDC/DMA2D—液晶显示
本章參考資料:《STM32F4xx 參考手冊(cè) 2》、《STM32F4xx 規(guī)格書》、庫幫助文檔
《stm32f4xx_dsp_stdperiph_lib_um.chm》。
關(guān)于開發(fā)板配套的液晶屏參數(shù)可查閱《5.0 寸液晶屏數(shù)據(jù)手冊(cè)》配套資料獲知。
顯示器簡介
顯示器屬于計(jì)算機(jī)的 I/O 設(shè)備,即輸入輸出設(shè)備。它是一種將特定電子信息輸出到屏
幕上再反射到人眼的顯示工具。 常見的有 CRT 顯示器、液晶顯示器、 LED 點(diǎn)陣顯示器及
OLED 顯示器。
液晶顯示器
液晶顯示器,簡稱 LCD(Liquid Crystal Display),相對(duì)于上一代 CRT 顯示器(陰極射線
管顯示器), LCD 顯示器具有功耗低、體積小、承載的信息量大及不傷眼的優(yōu)點(diǎn),因而它成
為了現(xiàn)在的主流電子顯示設(shè)備,其中包括電視、電腦顯示器、手機(jī)屏幕及各種嵌入式設(shè)備
的顯示器。圖 27-1 是液晶電視與 CRT 電視的外觀對(duì)比,很明顯液晶電視更薄,“時(shí)尚”
是液晶電視給人的第一印象,而 CRT 電視則感覺很“笨重”。
?
液晶是一種介于固體和液體之間的特殊物質(zhì),它是一種有機(jī)化合物,常態(tài)下呈液態(tài),
但是它的分子排列卻和固體晶體一樣非常規(guī)則,因此取名液晶。 如果給液晶施加電場(chǎng),會(huì)
改變它的分子排列, 從而改變光線的傳播方向, 配合偏振光片,它就具有控制光線透過率
的作用,再配合彩色濾光片,改變加給液晶電壓大小,就能改變某一顏色透光量的多少,
圖 27-2 中的就是綠色顯示結(jié)構(gòu)。 利用這種原理,做出可控紅、綠、藍(lán)光輸出強(qiáng)度的顯示結(jié)
構(gòu),把三種顯示結(jié)構(gòu)組成一個(gè)顯示單位,通過控制紅綠藍(lán)的強(qiáng)度,可以使該單位混合輸出
不同的色彩,這樣的一個(gè)顯示單位被稱為像素。
?
注意液晶本身是不發(fā)光的,所以需要有一個(gè)背光燈提供光源,光線經(jīng)過一系列處理過
程才到輸出,所以輸出的光線強(qiáng)度是要比光源的強(qiáng)度低很多的,比較浪費(fèi)能源(當(dāng)然,比
CRT 顯示器還是節(jié)能多了)。而且這些處理過程會(huì)導(dǎo)致顯示方向比較窄,也就是它的視角較
小,從側(cè)面看屏幕會(huì)看不清它的顯示內(nèi)容。另外,輸出的色彩變換時(shí),液晶分子轉(zhuǎn)動(dòng)也需
要消耗一定的時(shí)間,導(dǎo)致屏幕的響應(yīng)速度低。
LED 和 OLED 顯示器
LED 點(diǎn)陣顯示器不存在以上液晶顯示器的問題, LED 點(diǎn)陣彩色顯示器的單個(gè)像素點(diǎn)內(nèi)
包含紅綠藍(lán)三色 LED 燈,顯示原理類似我們實(shí)驗(yàn)板上的 LED 彩燈,通過控制紅綠藍(lán)顏色
的強(qiáng)度進(jìn)行混色,實(shí)現(xiàn)全彩顏色輸出,多個(gè)像素點(diǎn)構(gòu)成一個(gè)屏幕。由于每個(gè)像素點(diǎn)都是
LED 燈自發(fā)光的,所以在戶外白天也顯示得非常清晰,但由于 LED 燈體積較大,導(dǎo)致屏幕
的像素密度低,所以它一般只適合用于廣場(chǎng)上的巨型顯示器。相對(duì)來說,單色的 LED 點(diǎn)陣
顯示器應(yīng)用得更廣泛,如公交車上的信息展示牌、店招等,見圖 27-3。
新一代的 OLED 顯示器與 LED 點(diǎn)陣彩色顯示器的原理類似,但由于它采用的像素單元
是“有機(jī)發(fā)光二極管” (Organic Light Emitting Diode),所以像素密度比普通 LED 點(diǎn)陣顯示
器高得多,見圖 27-5。
?
OLED 顯示器不需要背光源、對(duì)比度高、輕薄、視角廣及響應(yīng)速度快等優(yōu)點(diǎn)。待到生
產(chǎn)工藝更加成熟時(shí),必將取代現(xiàn)在液晶顯示器的地位,見圖 27-5。
?
?顯示器的基本參數(shù)
不管是哪一種顯示器,都有一定的參數(shù)用于描述它們的特性,各個(gè)參數(shù)介紹如下:
(1) 像素
像素是組成圖像的最基本單元要素,顯示器的像素指它成像最小的點(diǎn),即前面講解液
晶原理中提到的一個(gè)顯示單元。
(1) 分辨率
一些嵌入式設(shè)備的顯示器常常以“行像素值 x 列像素值”表示屏幕的分辨率。如分辨
率 800x480 表示該顯示器的每一行有 800 個(gè)像素點(diǎn),每一列有 480 個(gè)像素點(diǎn),也可理
解為有 800 列, 480 行。
(2) 色彩深度
色彩深度指顯示器的每個(gè)像素點(diǎn)能表示多少種顏色,一般用“位” (bit)來表示。如單
色屏的每個(gè)像素點(diǎn)能表示亮或滅兩種狀態(tài)(即實(shí)際上能顯示 2 種顏色),用 1 個(gè)數(shù)據(jù)位
就可以表示像素點(diǎn)的所有狀態(tài),所以它的色彩深度為 1bit,其它常見的顯示屏色深為
16bit、 24bit。
(3) 顯示器尺寸
顯示器的大小一般以英寸表示,如 5 英寸、 21 英寸、 24 英寸等,這個(gè)長度是指屏幕對(duì)
角線的長度, 通過顯示器的對(duì)角線長度及長寬比可確定顯示器的實(shí)際長寬尺寸。
(4) 點(diǎn)距
點(diǎn)距指兩個(gè)相鄰像素點(diǎn)之間的距離, 它會(huì)影響畫質(zhì)的細(xì)膩度及觀看距離,相同尺寸的
屏幕,若分辨率越高,則點(diǎn)距越小,畫質(zhì)越細(xì)膩。如現(xiàn)在有些手機(jī)的屏幕分辨率比電
腦顯示器的還大,這是手機(jī)屏幕點(diǎn)距小的原因; LED 點(diǎn)陣顯示屏的點(diǎn)距一般都比較大,
所以適合遠(yuǎn)距離觀看。
STM32F429 系列的芯片不需要額外的液晶控制器,也就是說它把專用液晶控制器的功能集成到?STM32F429?芯片內(nèi)部了,節(jié)約
了額外的控制器成本。?
(1) RGB 信號(hào)線
RGB 信號(hào)線各有 8 根,分別用于表示液晶屏一個(gè)像素點(diǎn)的紅、綠、藍(lán)顏色分量。使用
紅綠藍(lán)顏色分量來表示顏色是一種通用的做法,打開 Windows 系統(tǒng)自帶的畫板調(diào)色工
具,可看到顏色的紅綠藍(lán)分量值,見圖 27-7。常見的顏色表示會(huì)在“RGB”后面附帶
各個(gè)顏色分量值的數(shù)據(jù)位數(shù),如 RGB565 表示紅綠藍(lán)的數(shù)據(jù)線數(shù)分別為 5、 6、 5 根,
一共為 16 個(gè)數(shù)據(jù)位,可表示 216 種顏色;而這個(gè)液晶屏的種顏色分量的數(shù)據(jù)線都有 8
根,所以它支持 RGB888 格式,一共 24 位數(shù)據(jù)線,可表示的顏色為 224種。
(2) 同步時(shí)鐘信號(hào) CLK
液晶屏與外部使用同步通訊方式,以 CLK 信號(hào)作為同步時(shí)鐘,在同步時(shí)鐘的驅(qū)動(dòng)下,
每個(gè)時(shí)鐘傳輸一個(gè)像素點(diǎn)數(shù)據(jù)。
(3) 水平同步信號(hào) HSYNC
水平同步信號(hào) HSYNC(Horizontal Sync)用于表示液晶屏一行像素?cái)?shù)據(jù)的傳輸結(jié)束,每
傳輸完成液晶屏的一行像素?cái)?shù)據(jù)時(shí), HSYNC 會(huì)發(fā)生電平跳變,如分辨率為 800x480 的
顯示屏(800 列, 480 行),傳輸一幀的圖像 HSYNC 的電平會(huì)跳變 480 次。
(4) 垂直同步信號(hào) VSYNC
垂直同步信號(hào) VSYNC(Vertical Sync)用于表示液晶屏一幀像素?cái)?shù)據(jù)的傳輸結(jié)束,每傳
輸完成一幀像素?cái)?shù)據(jù)時(shí), VSYNC 會(huì)發(fā)生電平跳變。其中“幀”是圖像的單位,一幅
圖像稱為一幀,在液晶屏中,一幀指一個(gè)完整屏液晶像素點(diǎn)。人們常常用“幀/秒”來
表示液晶屏的刷新特性,即液晶屏每秒可以顯示多少幀圖像,如液晶屏以 60 幀/秒的
速率運(yùn)行時(shí), VSYNC 每秒鐘電平會(huì)跳變 60 次。
(5) 數(shù)據(jù)使能信號(hào) DE
數(shù)據(jù)使能信號(hào) DE(Data Enable)用于表示數(shù)據(jù)的有效性,當(dāng) DE 信號(hào)線為高電平時(shí),
RGB 信號(hào)線表示的數(shù)據(jù)有效。
液晶數(shù)據(jù)傳輸時(shí)序
通過上述信號(hào)線向液晶屏傳輸像素?cái)?shù)據(jù)時(shí),各信號(hào)線的時(shí)序見圖 27-8。 圖中表示的是
向液晶屏傳輸一幀圖像數(shù)據(jù)的時(shí)序, 中間省略了多行及多個(gè)像素點(diǎn)。
液晶屏顯示的圖像可看作一個(gè)矩形,結(jié)合圖 27-9 來理解。液晶屏有一個(gè)顯示指針,它
指向?qū)⒁@示的像素。顯示指針的掃描方向方向從左到右、從上到下,一個(gè)像素點(diǎn)一個(gè)像
素點(diǎn)地描繪圖形。這些像素點(diǎn)的數(shù)據(jù)通過 RGB 數(shù)據(jù)線傳輸至液晶屏,它們?cè)谕綍r(shí)鐘
CLK 的驅(qū)動(dòng)下一個(gè)一個(gè)地傳輸?shù)揭壕林?#xff0c;交給顯示指針,傳輸完成一行時(shí),水平同步信
號(hào) HSYNC 電平跳變一次,而傳輸完一幀時(shí) VSYNC 電平跳變一次。
顯存
液晶屏中的每個(gè)像素點(diǎn)都是數(shù)據(jù),在實(shí)際應(yīng)用中需要把每個(gè)像素點(diǎn)的數(shù)據(jù)緩存起來,
再傳輸給液晶屏,這種存儲(chǔ)顯示數(shù)據(jù)的存儲(chǔ)器被稱為顯存。顯存一般至少要能存儲(chǔ)液晶屏
的一幀顯示數(shù)據(jù),如分辨率為 800x480 的液晶屏,使用 RGB888 格式顯示,它的一幀顯示
數(shù)據(jù)大小為: 3x800x480=1152000 字節(jié);若使用 RGB565 格式顯示,一幀顯示數(shù)據(jù)大小為:
2x800x480=768000 字節(jié)。
常見的顏色表示會(huì)在“RGB”后面附帶各個(gè)顏色分量值的數(shù)據(jù)位數(shù),如RGB565
表示紅綠藍(lán)的數(shù)據(jù)線數(shù)分別為5、 6、 5根,一共為16個(gè)數(shù)據(jù)位,可表示216
種顏色;而我們這個(gè)液晶屏的種顏色分量的數(shù)據(jù)線都有8根,所以它支持
RGB888格式,一共24位數(shù)據(jù)線,可表示的顏色為224種。
RGB后面的數(shù)值,分別代表其表示顏色的bits。
?
LCD-TFT 控制器 (LTDC)
LTDC 液晶控制器簡介
STM32F429 系列芯片內(nèi)部自帶一個(gè) LTDC 液晶控制器,使用 SDRAM 的部分空間作為
顯存,可直接控制液晶面板,無需額外增加液晶控制器芯片。 STM32 的 LTDC 液晶控制器
最高支持 800x600 分辨率的屏幕;可支持多種顏色格式,包括 RGB888、 RGB565、
ARGB8888 和 ARGB1555 等(其中的“A”是指透明像素);支持 2 層顯示數(shù)據(jù)混合,利用這
個(gè)特性,可高效地做出背景和前景分離的顯示效果,如以視頻為背景,在前景顯示彈幕。
圖像數(shù)據(jù)混合
LTDC 外設(shè)支持 2 層數(shù)據(jù)混合,混合前使用 2 層數(shù)據(jù)源,分別為前景層和背景層,見
圖 27-10。在輸出時(shí),實(shí)際上液晶屏只能顯示一層圖像,所以 LTDC 在輸出數(shù)據(jù)到液晶屏
前需要把 2 層圖像混合成一層,跟 Photoshop 軟件的分層合成圖片過程類似。混合時(shí),直
接用前景層中的不透明像素替換相同位置的背景像素;而前景層中透明像素的位置,則使
用背景的像素?cái)?shù)據(jù),即顯示背景層的像素。
?
如果想使用圖像混合功能,前景層必須使用包含透明的像素格式,如 ARGB1555 或
ARGB8888。其中 ARGB1555 使用 1 個(gè)數(shù)據(jù)位表示透明元素,它只能表示像素是透明或不
透明,當(dāng)最高位(即“A”位)為 1 時(shí),表示這是一個(gè)不透明的像素,具體顏色值為 RGB 位
表示的顏色,而當(dāng)最高位為 0 時(shí),表示這是一個(gè)完全透明的像素, RGB 位的數(shù)據(jù)無效;而
ARGB8888 的像素格式使用 8 個(gè)數(shù)據(jù)位表示透明元素,它使用高 8 位表示“透明度” (即代
表“A”的 8 個(gè)數(shù)據(jù)位),若 A 的值為“0xFF”,則表示這個(gè)像素完全不透明,若 A 的值為
“0x00”則表示這個(gè)像素完全透明,介于它們之間的值表示其 RGB 顏色不同程度的透明度,
即混合后背景像素根據(jù)這個(gè)值按比例來表示。
注意液晶屏本身是沒有透明度概念的,如 24 位液晶屏的像素?cái)?shù)據(jù)格式是 RGB888,
RGB 顏色各有對(duì)應(yīng)的 8 根數(shù)據(jù)線,不存在用于表示透明度的數(shù)據(jù)線,所以實(shí)際上 ARGB 只
是針對(duì)內(nèi)部分層數(shù)據(jù)處理的格式,最終經(jīng)過混合運(yùn)算得出直接顏色數(shù)據(jù) RGB888 才能交給
液晶屏顯示。
?
圖像處理單元
LTDC 框圖標(biāo)號(hào)?表示的是圖像處理單元,它通過“AHB 接口”獲取顯存中的數(shù)據(jù),
然后按分層把數(shù)據(jù)分別發(fā)送到兩個(gè)“層 FIFO”緩存,每個(gè) FIFO 可緩存 64x32 位的數(shù)據(jù),
接著從緩存中獲取數(shù)據(jù)交給“PFC” (像素格式轉(zhuǎn)換器),它把數(shù)據(jù)從像素格式轉(zhuǎn)換成字
(ARGB8888)的格式,再經(jīng)過“混合單元”把兩層數(shù)據(jù)合并起來,最終混合得到的是單層要
顯示的數(shù)據(jù),通過信號(hào)線輸出到液晶面板。這部分結(jié)構(gòu)與 DMA2D 的很類似,我們?cè)谙乱?br />小節(jié)詳細(xì)講解。
在輸出前混合單元的數(shù)據(jù)還經(jīng)過一個(gè)“抖動(dòng)單元”,它的作用是當(dāng)像素?cái)?shù)據(jù)格式的色
深大于液晶面板實(shí)際色深時(shí),對(duì)像素?cái)?shù)據(jù)顏色進(jìn)行舍入操作,如向 18 位顯示器上顯示 24
位數(shù)據(jù)時(shí),抖動(dòng)單元把像素?cái)?shù)據(jù)的低 6 位與閾值比較,若大于閾值,則向數(shù)據(jù)的第 7 位進(jìn)
1,否則直接舍掉低 6 位。
配置和狀態(tài)寄存器
框圖中標(biāo)號(hào)?表示的是 LTDC 的控制邏輯,它包含了 LTDC 的各種配置和狀態(tài)寄存器。
如配置與液晶面板通訊時(shí)信號(hào)線的有效電平、各種時(shí)間參數(shù)、有效數(shù)據(jù)寬度、像素格式及
顯存址等等, LTDC 外設(shè)根據(jù)這些配置控制數(shù)據(jù)輸出,使用 AHB 接口從顯存地址中搬運(yùn)數(shù)
據(jù)到液晶面板。還有一系列用于指示當(dāng)前顯示狀態(tài)和位置的狀態(tài)寄存器,通過讀取這些寄
存器可以了解 LTDC 的工作狀態(tài)。
時(shí)鐘信號(hào)
LTDC 外設(shè)使用 3 種時(shí)鐘信號(hào),包括 AHB 時(shí)鐘、 APB2 時(shí)鐘及像素時(shí)鐘 LCD_CLK。
AHB 時(shí)鐘用于驅(qū)動(dòng)數(shù)據(jù)從存儲(chǔ)器存儲(chǔ)到 FIFO, APB2 時(shí)鐘用于驅(qū)動(dòng) LTDC 的寄存器。而
LCD_CLK 用于生成與液晶面板通訊的同步時(shí)鐘,見圖 27-12,它的來源是 HSE(高速外部
晶振),經(jīng)過“/M”分頻因子分頻輸出到“PLLSAI”分頻器,信號(hào)由“PLLSAI”中的倍頻
因子 N 倍頻得到“PLLSAIN”時(shí)鐘、然后由“/R”因子分頻得到“PLLCDCLK”時(shí)鐘,再
經(jīng)過“DIV”因子得到“LCD-TFT clock”,“LCD-TFT clock”即通訊中的同步時(shí)鐘
LCD_CLK,它使用 LCD_CLK 引腳輸出。
?
??/************************************************2017.7.29***************************************************************/
LTDC 初始化結(jié)構(gòu)體
這里有很多涉及寄存器的東西,如果不是必要,不用自己去配置。
但是卻有幾個(gè)值得注意的地方:
第一:關(guān)于LTDC的引腳復(fù)用:
看到上圖不要以為LCD_G3和LCD_B2可以同時(shí)使用一個(gè)引腳,LCD_B2還有其他引腳可以使用,只是提醒自己不要以為復(fù)用只有AF14的LCD,在AF9處還隱藏著有LCD的復(fù)用功能。
有可能是復(fù)用AF14也可能是復(fù)用AF9,具體如何選擇AF14還是AF9的復(fù)用呢?在stm32f4xx_gpio.h中:
期間當(dāng)然還有更多的復(fù)用選擇:
需要注意的是這里L(fēng)TDC復(fù)用不是單純的只有AF14,還有AF9的。
第二點(diǎn):用sdram寫點(diǎn)刷屏方式:
?
?這樣可能會(huì)在屏幕下方有亂碼或者花屏這樣的現(xiàn)象,此時(shí)需要更改sdram中的一個(gè)配置:
static void SDRAM_InitSequence(void)函數(shù)中的:
突發(fā)長度如果配置成8可能會(huì)出現(xiàn)上面所說的花屏問題,改成4之后,得到了解決。
?/************************************************2017.7.29***************************************************************/
?
轉(zhuǎn)載于:https://www.cnblogs.com/yangguang-it/p/7227356.html
總結(jié)
以上是生活随笔為你收集整理的LTDC/DMA2D—液晶显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无缘无故梦到自己怀孕怎么回事
- 下一篇: linux文件系统及bash基础特性