国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站是怎么做的嗎谷歌網(wǎng)頁(yè)版登錄入口

網(wǎng)站是怎么做的嗎,谷歌網(wǎng)頁(yè)版登錄入口,wordpress 蝦米音樂(lè)插件,wordpress 頂部白條大綱 1. 引言 2. TLI外設(shè)特點(diǎn) 3. TLI硬件架構(gòu) 4. TLI寄存器功能 5. TLI的配置和使用步驟 6. TLI圖層概念 7. 圖像處理和顯示優(yōu)化 8. 基于GD32H759I-EVAL開(kāi)發(fā)板的TLI應(yīng)用示例 1. 引言 在當(dāng)今的嵌入式系統(tǒng)設(shè)計(jì)中,圖形用戶(hù)界面(GUI)的應(yīng)…

大綱

1. 引言
2. TLI外設(shè)特點(diǎn)
3. TLI硬件架構(gòu)
4. TLI寄存器功能
5. TLI的配置和使用步驟
6. TLI圖層概念
7. 圖像處理和顯示優(yōu)化
8. 基于GD32H759I-EVAL開(kāi)發(fā)板的TLI應(yīng)用示例

?

1. 引言

在當(dāng)今的嵌入式系統(tǒng)設(shè)計(jì)中,圖形用戶(hù)界面(GUI)的應(yīng)用越來(lái)越廣泛,這不僅僅是因?yàn)樗鼈兲峁┝烁庇^、易用的交互方式,還因?yàn)閺?qiáng)大的GUI能夠極大地提升產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力。GD32H7系列微控制器(MCU)作為高性能的ARM Cortex-M7平臺(tái),以其高達(dá)480 MHz的處理速度和豐富的外設(shè)集成度,成為實(shí)現(xiàn)復(fù)雜GUI應(yīng)用的理想選擇。其中,TFT LCD Interface(TLI)作為GD32H7系列的一項(xiàng)關(guān)鍵外設(shè),為開(kāi)發(fā)人員提供了一個(gè)強(qiáng)大而靈活的工具,用于開(kāi)發(fā)高質(zhì)量的圖形顯示應(yīng)用。

TLI外設(shè)不僅支持多種顏色格式和高分辨率的顯示,還內(nèi)置了硬件圖層疊加和像素格式轉(zhuǎn)換等高級(jí)功能,這使得開(kāi)發(fā)者能夠輕松實(shí)現(xiàn)復(fù)雜的圖形界面設(shè)計(jì),同時(shí)保持系統(tǒng)的高性能運(yùn)行。此外,GD32H7系列的高集成度意味著開(kāi)發(fā)者可以利用更少的外圍組件來(lái)完成更多的功能,這在成本和空間受限的應(yīng)用場(chǎng)景下尤為寶貴。

2. TLI外設(shè)特點(diǎn):

  1. 支持的分辨率:TLI外設(shè)支持高達(dá)2048x2048像素的分辨率,使其能夠驅(qū)動(dòng)高清顯示屏,為用戶(hù)提供豐富、清晰的圖形和文本顯示。

  2. 圖層:支持多達(dá)2個(gè)圖層,每個(gè)圖層可以單獨(dú)控制和配置,包括顏色格式、大小、位置等,支持圖層間的混合和透明度控制。

  3. 像素格式:支持多種像素格式,包括但不限于RGB565, RGB888, ARGB1555, ARGB4444, L8(灰度圖像)等,為不同類(lèi)型的圖像顯示提供靈活性。

  4. 直接存儲(chǔ)訪問(wèn)(DMA):內(nèi)置DMA控制,減輕CPU的負(fù)擔(dān),提高數(shù)據(jù)傳輸效率,使得圖像能夠快速更新。

  5. 外部存儲(chǔ)器接口:與外部存儲(chǔ)器接口(如SDRAM)的無(wú)縫集成,允許存儲(chǔ)大型圖像和圖形資產(chǎn),為復(fù)雜或動(dòng)態(tài)界面提供必要的存儲(chǔ)支持。

  6. 同步控制:提供靈活的同步控制選項(xiàng),包括水平和垂直同步,以及像素時(shí)鐘控制,確保與各種LCD顯示屏的兼容性。

  7. 節(jié)能模式:支持多種節(jié)能模式,包括關(guān)閉背光和減少幀率,幫助減少整體功耗。

3. 應(yīng)用場(chǎng)景:

  • 高清圖形用戶(hù)界面(GUI):如觸摸屏界面、儀表盤(pán)、信息娛樂(lè)系統(tǒng)等。
  • 工業(yè)控制:如機(jī)器人控制器、自動(dòng)化設(shè)備的操作界面。
  • 醫(yī)療設(shè)備:如患者監(jiān)視器、診斷儀器的顯示屏。
  • 消費(fèi)電子:如智能家居控制面板、便攜式媒體播放器。

3.1提示:

在設(shè)計(jì)和實(shí)現(xiàn)基于TLI的解決方案時(shí),需要特別注意以下幾點(diǎn):

  • 確保所選顯示屏兼容TLI支持的同步模式和像素格式。
  • 圖層管理和內(nèi)存分配策略對(duì)于高效使用TLI和優(yōu)化性能至關(guān)重要。
  • 利用DMA傳輸和外部存儲(chǔ)器來(lái)存儲(chǔ)和管理大型圖形資源,以提高系統(tǒng)性能和響應(yīng)速度。

通過(guò)精確地配置TLI的各種參數(shù)和利用其強(qiáng)大的圖形處理能力,GD32H7系列微控制器可以為需要高性能圖形顯示的應(yīng)用提供強(qiáng)有力的解決方案。

3.2 TLI硬件塊圖和組成部分:

  1. 圖層控制器:TLI包含多個(gè)獨(dú)立的圖層控制器,每個(gè)控制器負(fù)責(zé)管理一個(gè)圖層的顯示。這些控制器允許不同圖層的內(nèi)容獨(dú)立渲染和控制,包括顏色格式、大小、位置及透明度等參數(shù)。

  2. 像素格式轉(zhuǎn)換器:TLI內(nèi)置的像素格式轉(zhuǎn)換器支持多種像素格式的轉(zhuǎn)換,確保不同格式的圖像數(shù)據(jù)可以被正確地處理并顯示。這對(duì)于兼容多種圖像資源和提供靈活的圖形設(shè)計(jì)至關(guān)重要。

  3. 定時(shí)器同步模塊:該模塊負(fù)責(zé)生成與外部LCD顯示屏同步所需的時(shí)序信號(hào),包括水平同步(HSYNC)、垂直同步(VSYNC)和像素時(shí)鐘(Pixel Clock)。正確的時(shí)序信號(hào)是保證圖像穩(wěn)定顯示的關(guān)鍵。

  4. DMA控制器:TLI的DMA(直接存儲(chǔ)器訪問(wèn))控制器允許圖像數(shù)據(jù)直接從內(nèi)存?zhèn)鬏數(shù)絋LI,無(wú)需CPU干預(yù)。這極大提高了數(shù)據(jù)傳輸?shù)男屎驼w系統(tǒng)性能。

  5. 背光控制模塊:控制LCD背光的模塊,提供對(duì)背光亮度的調(diào)節(jié)功能,以適應(yīng)不同的環(huán)境光條件,并幫助節(jié)能。

3.3 關(guān)鍵組件介紹:

  • 圖層控制器:每個(gè)圖層控制器都可以配置為不同的顏色深度和格式,如RGB565、ARGB8888等。此外,圖層控制器還支持圖層的透明度混合和色鍵功能,以實(shí)現(xiàn)復(fù)雜的圖形效果。

  • 像素格式轉(zhuǎn)換器:該轉(zhuǎn)換器支持從一種像素格式到另一種像素格式的轉(zhuǎn)換,如從RGB格式到Y(jié)UV格式。這對(duì)于視頻播放和圖像處理應(yīng)用特別有用。

  • 定時(shí)器同步模塊:通過(guò)精確配置,該模塊生成與特定LCD面板規(guī)格相匹配的時(shí)序信號(hào),保證顯示內(nèi)容的同步和穩(wěn)定性。

  • DMA控制器:DMA控制器支持高效的數(shù)據(jù)傳輸,能夠同時(shí)處理多個(gè)圖層數(shù)據(jù)的傳輸任務(wù)。它可以根據(jù)需要配置為連續(xù)模式或一次性傳輸模式。

通過(guò)這些高度集成的硬件組件,GD32H7系列微控制器中的TLI能夠?yàn)殚_(kāi)發(fā)者提供強(qiáng)大而靈活的顯示控制能力,使其能夠輕松構(gòu)建高質(zhì)量的圖形用戶(hù)界面和視頻播放應(yīng)用。

4. TLI的使用方法及寄存器介紹

TLI(LCD-TFT顯示控制器)的使用方法包括初始化配置、圖層設(shè)置、時(shí)序參數(shù)配置以及圖形數(shù)據(jù)的管理。以下是詳細(xì)的使用方法和關(guān)鍵寄存器的介紹,以表格形式呈現(xiàn)以便于理解。

初始化配置

在開(kāi)始使用TLI之前,首先需要進(jìn)行初始化配置,包括系統(tǒng)時(shí)鐘配置、TLI時(shí)鐘源選擇、以及基本的顯示參數(shù)設(shè)置。

步驟1:系統(tǒng)時(shí)鐘配置

確保系統(tǒng)時(shí)鐘有足夠的頻率以供TLI正常工作。GD32H7系列通常支持的最高系統(tǒng)時(shí)鐘頻率可以滿(mǎn)足大多數(shù)TLI應(yīng)用場(chǎng)景的需求。

步驟2:TLI時(shí)鐘源選擇

選擇合適的TLI時(shí)鐘源,并根據(jù)LCD顯示器的規(guī)格設(shè)置相應(yīng)的時(shí)鐘分頻,以生成正確的像素時(shí)鐘。

步驟3:基本顯示參數(shù)設(shè)置

設(shè)置TLI的基本顯示參數(shù),包括顯示方向、分辨率等。

圖層設(shè)置

TLI支持多個(gè)獨(dú)立圖層的顯示控制,每個(gè)圖層可以單獨(dú)配置,包括圖層大小、位置、顏色格式等。

步驟1:圖層使能

通過(guò)設(shè)置TLI圖層控制寄存器來(lái)使能特定的圖層。

步驟2:圖層配置

配置圖層的顏色格式、起始地址、大小和位置等參數(shù)。

時(shí)序參數(shù)配置

根據(jù)連接的LCD顯示器規(guī)格,配置TLI的時(shí)序參數(shù),包括同步脈沖寬度、背沿和前沿時(shí)間等。

圖形數(shù)據(jù)管理

通過(guò)DMA傳輸圖形數(shù)據(jù)到圖層的幀緩沖區(qū),或者直接通過(guò)CPU寫(xiě)入數(shù)據(jù)。

TLI(TFT-LCD接口)寄存器

在GD32H737, GD32H757, 和GD32H759系列微控制器中,TLI (TFT-LCD接口)寄存器是用于配置和管理TFT-LCD顯示模塊的關(guān)鍵組成部分。下面是TLI寄存器中一些重要寄存器的詳細(xì)介紹和它們的用法 :

  1. 同步脈沖寬度寄存器(TLI_SPSZ):用于配置水平同步(HS)和垂直同步(VS)脈沖的寬度。這決定了每幀中同步信號(hào)的精確時(shí)長(zhǎng)。

  2. 后沿寬度寄存器(TLI_BPSZ):設(shè)置水平和垂直后沿的寬度,即HS和VS信號(hào)結(jié)束后到下一個(gè)像素?cái)?shù)據(jù)開(kāi)始的時(shí)間間隔。

  3. 有效寬度寄存器(TLI_ASZ):定義了顯示區(qū)域的有效寬度,即屏幕上實(shí)際顯示圖像的區(qū)域。

  4. 總寬度寄存器(TLI_TSZ):設(shè)置了整個(gè)顯示區(qū)域的總寬度,包括同步脈沖、后沿、顯示區(qū)域及前沿的寬度。

  5. 控制寄存器(TLI_CTL):負(fù)責(zé)整個(gè)TLI模塊的啟動(dòng)、停止以及其他控制功能,如抖動(dòng)功能的啟用或禁用。

  6. 背景色配置寄存器(TLI_BGC):設(shè)置LCD顯示的背景顏色,包括紅色、綠色和藍(lán)色的值。

  7. 中斷使能寄存器(TLI_INTEN):啟用或禁用TLI的各種中斷源,如行標(biāo)記中斷、FIFO錯(cuò)誤中斷等。

  8. 中斷標(biāo)志寄存器(TLI_INTF):顯示當(dāng)前哪些中斷事件已經(jīng)發(fā)生,例如行標(biāo)記事件或FIFO下溢錯(cuò)誤。

  9. 中斷標(biāo)志清除寄存器(TLI_INTC):用于手動(dòng)清除已發(fā)生的中斷標(biāo)志,確保中斷處理程序正確執(zhí)行。

  10. 行標(biāo)記寄存器(TLI_LM):用于設(shè)置當(dāng)屏幕刷新到特定行時(shí),觸發(fā)一個(gè)行標(biāo)記中斷,這通常用于動(dòng)畫(huà)或屏幕更新同步。

  11. 當(dāng)前像素位置寄存器(TLI_CPPOS):顯示當(dāng)前正在處理的像素的水平和垂直位置,這對(duì)于調(diào)試顯示問(wèn)題非常有用。

  1. 第x 層控制寄存器(TLI_LxCTL):每個(gè)圖層都有一個(gè)對(duì)應(yīng)的配置寄存器,用于控制圖層的可見(jiàn)性、像素格式、Alpha值等關(guān)鍵特性。通過(guò)配置這些寄存器,可以對(duì)各個(gè)圖層進(jìn)行精確的控制,包括啟用/禁用圖層、選擇合適的像素格式,以及調(diào)整圖層的透明度。

  2. 圖層窗口偏移寄存器(窗口參數(shù)寄存器)(TLI_LxHPCR、TLI_LxVPCR):這兩個(gè)寄存器集合定義了每個(gè)圖層在整個(gè)屏幕中的位置和大小。通過(guò)設(shè)置水平和垂直方向的起始和結(jié)束位置,可以控制圖層的精確顯示區(qū)域。

  3. 圖層幀緩沖區(qū)地址寄存器(TLI_LxFBADDR)指定了每個(gè)圖層的幀緩沖區(qū)的物理地址。幀緩沖區(qū)是存儲(chǔ)圖像數(shù)據(jù)的內(nèi)存區(qū)域,TLI根據(jù)此地址讀取相應(yīng)的像素?cái)?shù)據(jù)用于顯示。

  4. 圖層幀緩沖區(qū)行距寄存器(TLI_LxFLLEN:設(shè)置了圖層幀緩沖區(qū)中每行像素?cái)?shù)據(jù)的長(zhǎng)度和偏移,確保TLI正確解析幀數(shù)據(jù)。? 注意的是 緩沖區(qū)的 大小 不僅與屏幕大小相關(guān),還與圖像的數(shù)據(jù)格式相關(guān) 如果是 RGB565,則一個(gè)像素占2個(gè)字節(jié),如果是RGB888,則一個(gè)像素占3個(gè)字節(jié), 這將影響 寄存器的值 如果 圖層為全屏大小(480*272),采用RGB565圖像,

    1. STDOFF[13:0] (<<16) 步幅偏移? 這個(gè)值定義了從某行起始處到下一行起始處之間的字節(jié)數(shù),則為 (480 * 2)

    2. FLL [13:0]? :?? ((480 * 2) + 3)
  5. 顏色鍵控制寄存器(TLI_LxCKEY):用于配置圖層的顏色鍵功能,可以設(shè)置一個(gè)特定的顏色作為“透明”顏色,當(dāng)圖層中的像素為該顏色時(shí),不會(huì)被顯示出來(lái),從而實(shí)現(xiàn)圖層之間的透明疊加效果。

  6. 圖層混合配置寄存器(TLI_LxBFCR):控制圖層間的混合模式和Alpha混合參數(shù),通過(guò)調(diào)整這些參數(shù),可以實(shí)現(xiàn)圖層之間復(fù)雜的視覺(jué)效果,如淡入淡出、圖層遮罩等。

  7. CLUT配置寄存器(TLI_LxCLUTWR):對(duì)于使用顏色查找表(CLUT)的圖層,此寄存器用于寫(xiě)入CLUT的顏色值。顏色查找表允許使用較少的數(shù)據(jù)位表示寬色域,節(jié)省內(nèi)存同時(shí)保持良好的圖像質(zhì)量。

  8. 中斷使能寄存器(TLI_INTEN):控制TLI的中斷使能狀態(tài),可用于開(kāi)啟或關(guān)閉特定的TLI事件中斷,如幀結(jié)束中斷、行標(biāo)記中斷等,以便在這些事件發(fā)生時(shí)執(zhí)行相應(yīng)的中斷服務(wù)程序。

  9. 中斷狀態(tài)寄存器(TLI_INTF)和中斷清除寄存器(TLI_INTC):這兩個(gè)寄存器用于管理TLI產(chǎn)生的中斷。中斷狀態(tài)寄存器顯示了哪些中斷事件已經(jīng)發(fā)生,而中斷清除寄存器則用于清除已經(jīng)處理的中斷事件標(biāo)志,防止重復(fù)響應(yīng)。

5. TLI的配置和使用步驟

5.1. 初始化步驟
????????系統(tǒng)時(shí)鐘配置
  • TLI的時(shí)鐘來(lái)源于PLL2輸出,需要在RCU(復(fù)位和時(shí)鐘控制單元)中進(jìn)行配置和啟用。
  • 確保PLL2配置了正確的乘法和除法因子,以獲得適合TLI的時(shí)鐘速率。
????????GPIO配置
  • 為T(mén)LI功能配置GPIO引腳,包括RGB數(shù)據(jù)、像素時(shí)鐘(PIXCLK)、水平同步(HSYNC)、垂直同步(VSYNC)和顯示使能(DE)信號(hào)的引腳。
  • 用于TLI功能的特定引腳可能需要設(shè)置為復(fù)用功能模式,并配置為高速輸出。
5.2. TLI核心配置
  • 啟動(dòng)TLI:通過(guò)設(shè)置TLI_CTL寄存器中的TLIEN位來(lái)啟用TLI。
  • 配置顯示時(shí)序:編程TLI_SPSZ、TLI_BPSZ、TLI_ASZ和TLI_TSZ寄存器,為水平和垂直尺寸定義同步脈沖寬度、背景寬度、活動(dòng)區(qū)域大小和總大小。
5.3. 圖層配置
  • 定義圖層屬性,包括顏色格式、窗口大小、位置,以及適用的話,顏色鍵控和CLUT(顏色查找表)設(shè)置。
  • 每個(gè)圖層都有自己的控制和配置寄存器,如LxWHPCR、LxWVPCR、LxDCCR,這些寄存器定義了圖層的窗口大小、位置和默認(rèn)顏色。
5.4. 圖層疊加和透明度設(shè)置
  • 使用LxPFCR和LxCAxCR寄存器配置圖層的混合因素,以達(dá)到多個(gè)圖層之間所需的透明度和混合效果。
  • 利用顏色鍵控功能,通過(guò)配置LxCKCR寄存器使特定顏色透明。
5.5. 啟動(dòng)和停止顯示更新
  • 要開(kāi)始顯示,確保圖層被啟用,并且TLI主控制被啟用。此操作啟動(dòng)從內(nèi)存通過(guò)DMA到TLI的數(shù)據(jù)傳輸,然后TLI將像素?cái)?shù)據(jù)輸出到連接的LCD。
  • 停止顯示更新涉及禁用圖層和/或主TLI控制,以停止數(shù)據(jù)傳輸和輸出。
5.6 示例代碼 ??????
/*** @brief 配置LCD的TLI接口* * 該函數(shù)初始化TLI接口,配置其時(shí)鐘源、信號(hào)極性、同步寬度、像素格式等參數(shù),* 以及配置兩個(gè)圖層(layer0和layer1)的窗口位置、像素格式、默認(rèn)顏色和融合因子等參數(shù)。* * @note 函數(shù)中不接受任何參數(shù),也不返回任何值。*/
void lcd_config(void)
{/* 啟用TLI時(shí)鐘 */rcu_periph_clock_enable(RCU_TLI);tli_gpio_config();/* 配置PLL2以生成72MHz的TLI時(shí)鐘 */rcu_pll_input_output_clock_range_config(IDX_PLL2, RCU_PLL2RNG_1M_2M, RCU_PLL2VCO_150M_420M);if(ERROR == rcu_pll2_config(25, 188, 3, 3, 3)) {while(1) {}}rcu_pll_clock_output_enable(RCU_PLL2R);rcu_tli_clock_div_config(RCU_PLL2R_DIV8);rcu_osci_on(RCU_PLL2_CK);if(ERROR == rcu_osci_stab_wait(RCU_PLL2_CK)) {while(1) {}}/* TLI初始化 *//* 初始化水平同步信號(hào)極性為低電平有效 */tli_initstruct.signalpolarity_hs = TLI_HSYN_ACTLIVE_LOW;/* 初始化垂直同步信號(hào)極性為低電平有效 */tli_initstruct.signalpolarity_vs = TLI_VSYN_ACTLIVE_LOW;/* 初始化數(shù)據(jù)使能信號(hào)極性為低電平有效 */tli_initstruct.signalpolarity_de = TLI_DE_ACTLIVE_LOW;/* 初始化像素時(shí)鐘極性為輸入的像素時(shí)鐘 */tli_initstruct.signalpolarity_pixelck = TLI_PIXEL_CLOCK_TLI;/* 時(shí)序配置 *//* 配置水平同步寬度 */tli_initstruct.synpsz_hpsz = 40;/* 配置垂直同步高度 */tli_initstruct.synpsz_vpsz = 9;/* 配置累計(jì)水平后 porch */tli_initstruct.backpsz_hbpsz = 42;/* 配置累計(jì)垂直后 porch */tli_initstruct.backpsz_vbpsz = 11;/* 配置累計(jì)激活寬度 */tli_initstruct.activesz_hasz = 522;/* 配置累計(jì)激活高度 */tli_initstruct.activesz_vasz = 283;/* 配置總寬度 */tli_initstruct.totalsz_htsz = 524;/* 配置總高度 */tli_initstruct.totalsz_vtsz = 285;/* 配置LCD背景顏色的R、G、B分量值 */tli_initstruct.backcolor_red = 0xFF;tli_initstruct.backcolor_green = 0xFF;tli_initstruct.backcolor_blue = 0xFF;tli_init(&tli_initstruct);/* 配置圖層0的窗口位置和大小 */tli_layer0_initstruct.layer_window_leftpos = 45;tli_layer0_initstruct.layer_window_rightpos = (43 + 480 - 1);tli_layer0_initstruct.layer_window_toppos =  12;tli_layer0_initstruct.layer_window_bottompos = (12 + 272 - 1);/* 配置圖層0的像素格式 */tli_layer0_initstruct.layer_ppf = LAYER_PPF_RGB565;/* 配置圖層0的常量Alpha值 */tli_layer0_initstruct.layer_sa = 255;/* 配置圖層0的默認(rèn)顏色(R、G、B、A分量值) */tli_layer0_initstruct.layer_default_blue = 0xFF;tli_layer0_initstruct.layer_default_green = 0xFF;tli_layer0_initstruct.layer_default_red = 0xFF;tli_layer0_initstruct.layer_default_alpha = 0xFF;/* 配置圖層0的融合因子 */tli_layer0_initstruct.layer_acf1 = LAYER_ACF1_PASA;tli_layer0_initstruct.layer_acf2 = LAYER_ACF1_PASA;/* 配置圖層0的輸入地址(幀緩沖區(qū)位于FLASH內(nèi)存中) */tli_layer0_initstruct.layer_frame_bufaddr = (uint32_t)image_background0;tli_layer0_initstruct.layer_frame_line_length = ((480 * 2) + 3);tli_layer0_initstruct.layer_frame_buf_stride_offset = (480 * 2);tli_layer0_initstruct.layer_frame_total_line_number = 272;tli_layer_init(LAYER0, &tli_layer0_initstruct);/* 配置圖層1的窗口位置和大小 */tli_layer1_initstruct.layer_window_leftpos = 162;tli_layer1_initstruct.layer_window_rightpos = (160 + 240 - 1);tli_layer1_initstruct.layer_window_toppos =  12;tli_layer1_initstruct.layer_window_bottompos = (12 + 272 - 1);/* 配置圖層1的像素格式 */tli_layer1_initstruct.layer_ppf = LAYER_PPF_RGB565;/* 配置圖層1的常量Alpha值 */tli_layer1_initstruct.layer_sa = 255;/* 配置圖層1的默認(rèn)顏色(R、G、B、A分量值) */tli_layer1_initstruct.layer_default_blue = 0xFF;tli_layer1_initstruct.layer_default_green = 0xFF;tli_layer1_initstruct.layer_default_red = 0xFF;tli_layer1_initstruct.layer_default_alpha = 0;/* 配置圖層1的融合因子 */tli_layer1_initstruct.layer_acf1 = LAYER_ACF1_PASA;tli_layer1_initstruct.layer_acf2 = LAYER_ACF1_PASA;/* 配置圖層1的輸入地址(幀緩沖區(qū)位于內(nèi)存SDRAM中) */tli_layer1_initstruct.layer_frame_bufaddr = (uint32_t)0xC1000000;tli_layer1_initstruct.layer_frame_line_length = ((240 * 2) + 3);tli_layer1_initstruct.layer_frame_buf_stride_offset = (240 * 2);tli_layer1_initstruct.layer_frame_total_line_number = 272;tli_layer_init(LAYER1, &tli_layer1_initstruct);tli_dither_config(TLI_DITHER_ENABLE);
}

6.圖層概念

在GD32H7系列的TLI(TFT LCD Controller)中,圖層(Layer)是獨(dú)立的圖像區(qū)域,可以單獨(dú)控制并與其他圖層疊加顯示。每個(gè)圖層可以設(shè)置不同的屬性,如顏色格式、大小、位置和透明度等。這種多圖層的設(shè)計(jì)允許開(kāi)發(fā)者創(chuàng)建復(fù)雜且動(dòng)態(tài)的用戶(hù)界面,如菜單、按鈕、動(dòng)畫(huà)和其他圖形元素,而不會(huì)互相干擾。

6.1 如何創(chuàng)建和配置圖層
  1. 選擇圖層并啟用:GD32H7的TLI支持多個(gè)圖層。首先需要根據(jù)需求選擇并啟用特定的圖層。例如,使用TLI_LayerEnable(LAYERx);函數(shù)啟用圖層。

  2. 配置圖層屬性

    • 設(shè)置顏色格式:根據(jù)圖像數(shù)據(jù)的類(lèi)型,選擇合適的顏色格式,如RGB565或ARGB8888等。
    • 設(shè)定圖層大小和位置:指定圖層在LCD上的顯示位置和大小。
    • 設(shè)置幀緩沖區(qū):為圖層指定幀緩沖區(qū)的地址,這里存放圖層要顯示的圖像數(shù)據(jù)。
  3. 透明度和顏色鍵控:配置圖層的透明度和顏色鍵控(Color Keying)功能,以實(shí)現(xiàn)圖層之間的透明或半透明效果。

6.2 圖層的動(dòng)態(tài)管理和更新在LVGL項(xiàng)目中的應(yīng)用

在使用LVGL(Light and Versatile Graphics Library)構(gòu)建GUI項(xiàng)目時(shí),TLI的圖層管理功能可以與LVGL框架結(jié)合,以?xún)?yōu)化顯示效果和性能。

  1. 圖層與LVGL對(duì)象綁定:可以將TLI圖層與LVGL的對(duì)象或頁(yè)面綁定,為不同的UI元素使用不同的圖層。這樣做可以減少重繪的需要,提高界面響應(yīng)速度。

  2. 動(dòng)態(tài)更新內(nèi)容:當(dāng)UI元素需要更新時(shí),只需修改對(duì)應(yīng)圖層的幀緩沖區(qū)內(nèi)容或?qū)傩?#xff0c;而無(wú)需重新繪制整個(gè)屏幕。這在動(dòng)畫(huà)效果或內(nèi)容頻繁變動(dòng)的場(chǎng)景中特別有用。

  3. 透明度和疊加效果:利用TLI的透明度管理,可以創(chuàng)建具有透明或半透明效果的UI元素,如彈出窗口、提示框等。同時(shí),顏色鍵控功能可用于實(shí)現(xiàn)復(fù)雜的疊加效果。

  4. 性能優(yōu)化:通過(guò)精心設(shè)計(jì)圖層的使用和配置,可以?xún)?yōu)化內(nèi)存使用和提高渲染效率。例如,靜態(tài)背景可以放置在一個(gè)單獨(dú)的圖層中,而動(dòng)態(tài)內(nèi)容在另一個(gè)圖層,減少了不必要的刷新。

7. 圖像處理和顯示優(yōu)化

??????? 在GD32H7系列MCU中,TLI的設(shè)計(jì)提供了強(qiáng)大的圖像顯示功能,包括支持多種像素格式的處理、像素DMA傳輸、層窗口和混合功能、抖動(dòng)功能,以及顏色查找表(LUT)支持。這些功能可以用于提高圖像處理和顯示的效率和質(zhì)量。以下是一些優(yōu)化策略:

7.1利用像素DMA優(yōu)化數(shù)據(jù)傳輸

??????? 像素DMA功能使得圖像數(shù)據(jù)可以直接從內(nèi)存?zhèn)鬏數(shù)斤@示緩沖區(qū),減少CPU的負(fù)擔(dān)。為了最大化數(shù)據(jù)傳輸效率,應(yīng)確保圖像數(shù)據(jù)存儲(chǔ)布局與TLI的數(shù)據(jù)需求相匹配,從而減少任何不必要的數(shù)據(jù)重排或轉(zhuǎn)換。

7.2采用多層顯示策略

通過(guò)TLI支持的多層顯示,可以將不同的視覺(jué)元素放置在不同的圖層上,例如,背景、圖標(biāo)、文本可以分別在不同的層上處理和渲染。這樣做不僅可以簡(jiǎn)化圖像合成的復(fù)雜度,還可以在不重繪整個(gè)屏幕的情況下更新局部區(qū)域,從而提高更新效率和響應(yīng)速度。

7.3優(yōu)化像素格式使用

根據(jù)顯示的需求選擇合適的像素格式,可以在保證視覺(jué)效果的同時(shí)優(yōu)化內(nèi)存使用。例如,對(duì)于不需要透明效果的簡(jiǎn)單圖形,可以選擇不帶Alpha通道的像素格式,以節(jié)省內(nèi)存空間。

7.4使用顏色查找表(LUT)

對(duì)于使用顏色較少的圖像,比如圖標(biāo)或用戶(hù)界面元素,使用顏色查找表(LUT)可以減少每個(gè)像素所需的數(shù)據(jù)量,同時(shí)保持良好的視覺(jué)效果。這對(duì)于減少內(nèi)存占用和加速圖像渲染尤為有效。

7.5色鍵透明處理

利用TLI的色鍵功能,可以實(shí)現(xiàn)簡(jiǎn)單的圖像透明處理,通過(guò)設(shè)定特定的顏色值作為“透明”標(biāo)記,TLI在渲染時(shí)會(huì)自動(dòng)將匹配該顏色的像素渲染為透明。這種方法適用于實(shí)現(xiàn)簡(jiǎn)單的圖像疊加效果,而無(wú)需復(fù)雜的Alpha混合計(jì)算。

?8.嘟嘟嘟啊?示例代碼:


#include "gd32h7xx.h"
#include "systick.h"
#include <stdio.h>
#include "gd32h759i_eval.h"
#include "image1.h"
#include "image2.h"
#include "image3.h"
#include "image4.h"
#include "image5.h"
#include "image6.h"
#include "image7.h"
#include "image8.h"
#include "image9.h"
#include "image10.h"
#include "image11.h"
#include "image12.h"#if defined (__clang__)
#include "logo.h"
#elif defined ( __ICCARM__ )
#include "logo_iar.h"
#endif
// 定義顯示設(shè)備的同步脈沖和有效顯示區(qū)域參數(shù)// 水平方向參數(shù)
#define HORIZONTAL_SYNCHRONOUS_PULSE  41 // 水平同步脈沖寬度
#define HORIZONTAL_BACK_PORCH         2 // 水平后 porch 寬度
#define ACTIVE_WIDTH                  480 // 水平有效顯示寬度
#define HORIZONTAL_FRONT_PORCH        2 // 水平前 porch 寬度// 垂直方向參數(shù)
#define VERTICAL_SYNCHRONOUS_PULSE    10 // 垂直同步脈沖高度
#define VERTICAL_BACK_PORCH           2 // 垂直后 porch 高度
#define ACTIVE_HEIGHT                 272 // 垂直有效顯示高度
#define VERTICAL_FRONT_PORCH          2 // 垂直前 porch 高度__ALIGNED(16) uint8_t blended_address_buffer[58292];static void ipa_config(uint32_t baseaddress);
static void tli_config(void);
static void tli_blend_config(void);
static void tli_gpio_config(void);
static void lcd_config(void);
static void cache_enable(void);/*!\brief      main program\param[in]  none\param[out] none\retval     none
*/
int main(void)
{/* enable the CPU cache */cache_enable();/* configure the SysTick, TLI */systick_config();lcd_config();/* enable TLI layers */tli_layer_enable(LAYER0);tli_layer_enable(LAYER1);tli_reload_config(TLI_FRAME_BLANK_RELOAD_EN);/* enable TLI */tli_enable();/* configure TLI and display blend image */tli_blend_config();tli_reload_config(TLI_REQUEST_RELOAD_EN);while(1) {/* IPA configuration and display the images one by one */ipa_config((uint32_t)&gImage_image1);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image2);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image3);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image4);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image5);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image6);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image7);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image8);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image9);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image10);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image11);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);ipa_config((uint32_t)&gImage_image12);ipa_transfer_enable();while(RESET == ipa_interrupt_flag_get(IPA_INT_FLAG_FTF));delay_1ms(50);}
}/*!\brief      LCD Configuration\param[in]  none\param[out] none\retval     none
*/
static void lcd_config(void)
{/* configure the GPIO of TLI */tli_gpio_config();/* configure TLI peripheral */tli_config();
}
/*! \brief      配置TLI外設(shè)\param[in]  無(wú)\param[out] 無(wú)\retval     無(wú)
*/
static void tli_config(void)
{tli_parameter_struct               tli_init_struct; // TLI配置結(jié)構(gòu)體tli_layer_parameter_struct         tli_layer_init_struct; // TLI層配置結(jié)構(gòu)體// 啟用TLI外設(shè)的時(shí)鐘rcu_periph_clock_enable(RCU_TLI);tli_gpio_config(); // 配置TLI相關(guān)的GPIO// 配置PLL2時(shí)鐘:CK_PLL2P/CK_PLL2Q/CK_PLL2R = HXTAL_VALUE / 25 * 150 / 3rcu_pll_input_output_clock_range_config(IDX_PLL2, RCU_PLL2RNG_1M_2M, RCU_PLL2VCO_150M_420M);if(ERROR == rcu_pll2_config(25, 150, 3, 3, 3)) {while(1) {}}// 啟用PLL2R時(shí)鐘輸出并配置TLI時(shí)鐘分頻rcu_pll_clock_output_enable(RCU_PLL2R);rcu_tli_clock_div_config(RCU_PLL2R_DIV8);// 啟用PLL2時(shí)鐘rcu_osci_on(RCU_PLL2_CK);// 等待PLL2時(shí)鐘穩(wěn)定if(ERROR == rcu_osci_stab_wait(RCU_PLL2_CK)) {while(1) {}}/* 配置TLI參數(shù)結(jié)構(gòu)體 */// 配置水平同步、垂直同步、DE及像素時(shí)鐘極性tli_init_struct.signalpolarity_hs = TLI_HSYN_ACTLIVE_LOW;tli_init_struct.signalpolarity_vs = TLI_VSYN_ACTLIVE_LOW;tli_init_struct.signalpolarity_de = TLI_DE_ACTLIVE_LOW;tli_init_struct.signalpolarity_pixelck = TLI_PIXEL_CLOCK_TLI;// 配置LCD顯示時(shí)序參數(shù)tli_init_struct.synpsz_hpsz = HORIZONTAL_SYNCHRONOUS_PULSE - 1;tli_init_struct.synpsz_vpsz = VERTICAL_SYNCHRONOUS_PULSE - 1;tli_init_struct.backpsz_hbpsz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH - 1;tli_init_struct.backpsz_vbpsz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH - 1;tli_init_struct.activesz_hasz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH- 1;tli_init_struct.activesz_vasz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH + ACTIVE_HEIGHT - 1;tli_init_struct.totalsz_htsz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH +HORIZONTAL_FRONT_PORCH - 1;tli_init_struct.totalsz_vtsz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH + ACTIVE_HEIGHT +VERTICAL_FRONT_PORCH - 1;// 配置LCD背景RGB顏色tli_init_struct.backcolor_red = 0xFF;tli_init_struct.backcolor_green = 0xFF;tli_init_struct.backcolor_blue = 0xFF;tli_init(&tli_init_struct); // 初始化TLI/** TLI(Transport Layer Interface)層配置* 此代碼段初始化了一個(gè)TLI層的配置結(jié)構(gòu)體,并設(shè)置了TLI層0的參數(shù)。* 配置包括窗口的位置、顏色格式、透明度、幀緩沖區(qū)地址等。*//* 設(shè)置TLI層窗口的左邊界位置 */tli_layer_init_struct.layer_window_leftpos = 80 + HORIZONTAL_SYNCHRONOUS_PULSE +HORIZONTAL_BACK_PORCH + 2;/* 設(shè)置TLI層窗口的右邊界位置 */tli_layer_init_struct.layer_window_rightpos = (80 + 320 + HORIZONTAL_SYNCHRONOUS_PULSE +HORIZONTAL_BACK_PORCH - 1);/* 設(shè)置TLI層窗口的上邊界位置 */tli_layer_init_struct.layer_window_toppos = 150 + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH;/* 設(shè)置TLI層窗口的下邊界位置 */tli_layer_init_struct.layer_window_bottompos = (150 + 100 + VERTICAL_SYNCHRONOUS_PULSE +VERTICAL_BACK_PORCH - 1);/* 設(shè)置TLI層的顏色格式為RGB565 */tli_layer_init_struct.layer_ppf = LAYER_PPF_RGB565;/* 設(shè)置層的飽和度調(diào)整因子為最大值 */tli_layer_init_struct.layer_sa = 0xFF;/* 設(shè)置層的默認(rèn)藍(lán)色成分值為最大值 */tli_layer_init_struct.layer_default_blue = 0xFF;/* 設(shè)置層的默認(rèn)綠色成分值為最大值 */tli_layer_init_struct.layer_default_green = 0xFF;/* 設(shè)置層的默認(rèn)紅色成分值為最大值 */tli_layer_init_struct.layer_default_red = 0xFF;/* 設(shè)置層的默認(rèn)透明度為不透明 */tli_layer_init_struct.layer_default_alpha = 0x0;/* 設(shè)置層的ACF1屬性為PASA */tli_layer_init_struct.layer_acf1 = LAYER_ACF1_PASA;/* 設(shè)置層的ACF2屬性為PASA */tli_layer_init_struct.layer_acf2 = LAYER_ACF2_PASA;/* 設(shè)置層的幀緩沖區(qū)地址 */tli_layer_init_struct.layer_frame_bufaddr = (uint32_t)gImage_logo;/* 設(shè)置層的幀緩沖區(qū)每行字節(jié)數(shù) */tli_layer_init_struct.layer_frame_line_length = ((320 * 2) + 3);/* 設(shè)置層的幀緩沖區(qū)步長(zhǎng) */tli_layer_init_struct.layer_frame_buf_stride_offset = (320 * 2);/* 設(shè)置層的總行數(shù) */tli_layer_init_struct.layer_frame_total_line_number = 100;/* 初始化TLI層0并應(yīng)用配置 */tli_layer_init(LAYER0, &tli_layer_init_struct);
}
/** 函數(shù)名稱(chēng):ipa_config* 功能描述:初始化并配置IPA(圖像處理加速器),包括設(shè)置像素格式轉(zhuǎn)換模式、目標(biāo)內(nèi)存地址、前景圖等。* 參數(shù)說(shuō)明:baseaddress - 輸入前景圖像 的基礎(chǔ)地址。* 返回值:無(wú)。*/
static void ipa_config(uint32_t baseaddress)
{ipa_destination_parameter_struct  ipa_destination_init_struct; // 定義IPA目標(biāo)配置結(jié)構(gòu)體ipa_foreground_parameter_struct   ipa_fg_init_struct; // 定義IPA前景圖配置結(jié)構(gòu)體// 啟用IPA的時(shí)鐘rcu_periph_clock_enable(RCU_IPA);// 初始化IPAipa_deinit();/* 配置IPA像素格式轉(zhuǎn)換模式 */ipa_pixel_format_convert_mode_set(IPA_FGTODE);/* 配置目標(biāo)像素格式 */ipa_destination_init_struct.destination_pf = IPA_DPF_RGB565;/* 配置目標(biāo)內(nèi)存基地址 */ipa_destination_init_struct.destination_memaddr = (uint32_t)&blended_address_buffer;/* 配置目標(biāo)預(yù)定義的Alpha值(RGB) */ipa_destination_init_struct.destination_pregreen = 0;ipa_destination_init_struct.destination_preblue = 0;ipa_destination_init_struct.destination_prered = 0;ipa_destination_init_struct.destination_prealpha = 0;/* 配置目標(biāo)行偏移量 */ipa_destination_init_struct.destination_lineoff = 0;/* 配置待處理圖像的高度 */ipa_destination_init_struct.image_height = 118;/* 配置待處理圖像的寬度 */ipa_destination_init_struct.image_width = 247;ipa_destination_init_struct.image_rotate = DESTINATION_ROTATE_0;ipa_destination_init_struct.image_hor_decimation = DESTINATION_HORDECIMATE_DISABLE;ipa_destination_init_struct.image_ver_decimation = DESTINATION_VERDECIMATE_DISABLE;/* 初始化IPA目標(biāo)配置 */ipa_destination_init(&ipa_destination_init_struct);/* 配置IPA前景圖初始化結(jié)構(gòu)體 *//* baseaddress: 前景圖內(nèi)存地址的起始位置 */ipa_fg_init_struct.foreground_memaddr = baseaddress;/* 設(shè)置前景圖的像素格式為RGB565 */ipa_fg_init_struct.foreground_pf = FOREGROUND_PPF_RGB565;/* 設(shè)置前景圖的透明度計(jì)算模式為模式0 */ipa_fg_init_struct.foreground_alpha_algorithm = IPA_FG_ALPHA_MODE_0;/* 設(shè)置前景圖的預(yù)透明值為0 */ipa_fg_init_struct.foreground_prealpha = 0x0;/* 設(shè)置前景圖的行偏移為0 */ipa_fg_init_struct.foreground_lineoff = 0x0;/* 設(shè)置前景圖的預(yù)藍(lán)色值為0 */ipa_fg_init_struct.foreground_preblue = 0x0;/* 設(shè)置前景圖的預(yù)綠色值為0 */ipa_fg_init_struct.foreground_pregreen = 0x0;/* 設(shè)置前景圖的預(yù)紅色值為0 */ipa_fg_init_struct.foreground_prered = 0x0;/* 前景圖初始化 */ipa_foreground_init(&ipa_fg_init_struct);
}/*!\brief      configure TLI peripheral and display blend image這個(gè)函數(shù)負(fù)責(zé)配置TLI(Thin-Layer Interface)以進(jìn)行圖像的混合顯示。在此函數(shù)中,通常會(huì)進(jìn)行層(Layer)的配置,包括層的背景色、透明度、圖像數(shù)據(jù)源等。它可能還會(huì)設(shè)置圖像的大小、位置以及如何將多個(gè)圖像層混合在一起顯示的具體參數(shù)。\param[in]  none\param[out] none\retval     none
*/
static void tli_blend_config(void)
{// 初始化TLI(Terminal Layer Interface)相關(guān)的參數(shù)和硬件設(shè)置// 此段代碼主要配置TLI的時(shí)鐘源、PLL2的輸入輸出時(shí)鐘范圍,并啟用PLL2時(shí)鐘輸出。tli_parameter_struct               tli_init_struct;tli_layer_parameter_struct         tli_layer_init_struct;rcu_periph_clock_enable(RCU_TLI);  // 啟用TLI的外設(shè)時(shí)鐘tli_gpio_config();                 // 配置TLI相關(guān)的GPIO/* 配置PLL2的輸入時(shí)鐘范圍和輸出時(shí)鐘范圍 */rcu_pll_input_output_clock_range_config(IDX_PLL2, RCU_PLL2RNG_1M_2M, RCU_PLL2VCO_150M_420M);/* 配置PLL2時(shí)鐘:CK_PLL2P/CK_PLL2Q/CK_PLL2R = HXTAL_VALUE / 25 * 150 / 3 */if(ERROR == rcu_pll2_config(25, 150, 3, 3, 3)) {while(1) {}}/* 啟用PLL2R時(shí)鐘輸出 */rcu_pll_clock_output_enable(RCU_PLL2R);rcu_tli_clock_div_config(RCU_PLL2R_DIV8);  // 配置TLI時(shí)鐘分頻rcu_osci_on(RCU_PLL2_CK);  // 開(kāi)啟PLL2時(shí)鐘if(ERROR == rcu_osci_stab_wait(RCU_PLL2_CK)) {  // 等待PLL2時(shí)鐘穩(wěn)定while(1) {}}/** 配置TLI(Transport Layer Interface)參數(shù)結(jié)構(gòu)體* 本段代碼主要負(fù)責(zé)初始化TLI參數(shù)結(jié)構(gòu)體,并設(shè)置LCD顯示時(shí)序配置和背景顏色。*//* 配置TLI參數(shù)結(jié)構(gòu)體中的信號(hào)極性 */tli_init_struct.signalpolarity_hs = TLI_HSYN_ACTLIVE_LOW;  /* 水平同步信號(hào)極性配置為活動(dòng)低電平 */tli_init_struct.signalpolarity_vs = TLI_VSYN_ACTLIVE_LOW;  /* 垂直同步信號(hào)極性配置為活動(dòng)低電平 */tli_init_struct.signalpolarity_de = TLI_DE_ACTLIVE_LOW;    /* 數(shù)據(jù)使能信號(hào)極性配置為活動(dòng)低電平 */tli_init_struct.signalpolarity_pixelck = TLI_PIXEL_CLOCK_TLI; /* 像素時(shí)鐘極性配置 *//* 配置LCD顯示時(shí)序 */tli_init_struct.synpsz_hpsz = HORIZONTAL_SYNCHRONOUS_PULSE - 1;  /* 水平同步脈沖寬度配置 */tli_init_struct.synpsz_vpsz = VERTICAL_SYNCHRONOUS_PULSE - 1;    /* 垂直同步脈沖寬度配置 */tli_init_struct.backpsz_hbpsz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH - 1;  /* 水平方向后 porch 寬度配置 */tli_init_struct.backpsz_vbpsz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH - 1;      /* 垂直方向后 porch 寬度配置 */tli_init_struct.activesz_hasz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH- 1; /* 水平方向活動(dòng)區(qū)域?qū)挾扰渲?*/tli_init_struct.activesz_vasz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH + ACTIVE_HEIGHT - 1; /* 垂直方向活動(dòng)區(qū)域高度配置 */tli_init_struct.totalsz_htsz = HORIZONTAL_SYNCHRONOUS_PULSE + HORIZONTAL_BACK_PORCH + ACTIVE_WIDTH +HORIZONTAL_FRONT_PORCH - 1;  /* 水平方向總線周期配置 */tli_init_struct.totalsz_vtsz = VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH + ACTIVE_HEIGHT +VERTICAL_FRONT_PORCH - 1;     /* 垂直方向總線周期配置 *//* 配置LCD背景顏色(紅色、綠色、藍(lán)色) */tli_init_struct.backcolor_red = 0xFF;   /* 背景紅色值配置 */tli_init_struct.backcolor_green = 0xFF; /* 背景綠色值配置 */tli_init_struct.backcolor_blue = 0xFF;  /* 背景藍(lán)色值配置 *//* 應(yīng)用TLI初始化結(jié)構(gòu)體配置 */tli_init(&tli_init_struct);  /** TLI(Transfer Layer Interface)層1配置* 此代碼段初始化TLI層1的設(shè)置,包括窗口位置、像素格式、默認(rèn)顏色及緩沖區(qū)配置等。*//* 設(shè)置TLI層1的窗口左邊界位置 */tli_layer_init_struct.layer_window_leftpos = 80 + HORIZONTAL_SYNCHRONOUS_PULSE +HORIZONTAL_BACK_PORCH + 2;/* 設(shè)置TLI層1的窗口右邊界位置 */tli_layer_init_struct.layer_window_rightpos = (80 + 247 + HORIZONTAL_SYNCHRONOUS_PULSE +HORIZONTAL_BACK_PORCH - 1);/* 設(shè)置TLI層1的窗口上邊界位置 */tli_layer_init_struct.layer_window_toppos = 20 + VERTICAL_SYNCHRONOUS_PULSE + VERTICAL_BACK_PORCH;/* 設(shè)置TLI層1的窗口下邊界位置 */tli_layer_init_struct.layer_window_bottompos = 20 + 118 + VERTICAL_SYNCHRONOUS_PULSE +VERTICAL_BACK_PORCH - 1;/* 配置TLI層1的像素格式為RGB565 */tli_layer_init_struct.layer_ppf = LAYER_PPF_RGB565;/* 設(shè)置層的alpha混合因子為全透 */tli_layer_init_struct.layer_sa = 0xFF;/* 配置層的ACF1參數(shù)為PASA */tli_layer_init_struct.layer_acf1 = LAYER_ACF1_PASA;/* 配置層的ACF2參數(shù)為PASA */tli_layer_init_struct.layer_acf2 = LAYER_ACF2_PASA;/* 設(shè)置層的默認(rèn)Alpha值為0 */tli_layer_init_struct.layer_default_alpha = 0;/* 設(shè)置層的默認(rèn)藍(lán)色值為0 */tli_layer_init_struct.layer_default_blue = 0;/* 設(shè)置層的默認(rèn)綠色值為0 */tli_layer_init_struct.layer_default_green = 0;/* 設(shè)置層的默認(rèn)紅色值為0 */tli_layer_init_struct.layer_default_red = 0;/* 設(shè)置層的幀緩沖區(qū)地址 */tli_layer_init_struct.layer_frame_bufaddr = (uint32_t)&blended_address_buffer;/* 設(shè)置層的幀緩沖區(qū)每行長(zhǎng)度 */tli_layer_init_struct.layer_frame_line_length = ((247 * 2) + 3);/* 設(shè)置層的幀緩沖區(qū)步長(zhǎng)偏移 */tli_layer_init_struct.layer_frame_buf_stride_offset = (247 * 2);/* 設(shè)置層的幀緩沖區(qū)總行數(shù) */tli_layer_init_struct.layer_frame_total_line_number = 118;/* 初始化TLI層1 */tli_layer_init(LAYER1, &tli_layer_init_struct);
}
/*!\brief      configure TLI GPIO\param[in]  none\param[out] none\retval     none
*/
static void tli_gpio_config(void)
{/* enable GPIO clock */rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_GPIOC);rcu_periph_clock_enable(RCU_GPIOD);rcu_periph_clock_enable(RCU_GPIOE);rcu_periph_clock_enable(RCU_GPIOF);rcu_periph_clock_enable(RCU_GPIOH);rcu_periph_clock_enable(RCU_GPIOG);/* configure HSYNC(PE15), VSYNC(PA7), PCLK(PG7) */gpio_af_set(GPIOE, GPIO_AF_14, GPIO_PIN_15);gpio_af_set(GPIOA, GPIO_AF_14, GPIO_PIN_7);gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_7);gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_15);gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_7);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_7);/* configure LCD_R7(PG6), LCD_R6(PH12), LCD_R5(PH11), LCD_R4(PA5), LCD_R3(PH9),LCD_R2(PH8),LCD_R1(PH3), LCD_R0(PH2) */gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_6);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_12);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_11);gpio_af_set(GPIOA, GPIO_AF_14, GPIO_PIN_5);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_9);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_8);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_3);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_2);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_6);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_6);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_12);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_11);gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_5);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_9);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_8);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_3);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_2);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_2);/* configure  LCD_G7(PD3), LCD_G6(PC7), LCD_G5(PC1), LCD_G4(PH15), LCD_G3(PH14), LCD_G2(PH13),LCD_G1(PB0), LCD_G0(PB1) */gpio_af_set(GPIOD, GPIO_AF_14, GPIO_PIN_3);gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_7);gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_1);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_15);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_14);gpio_af_set(GPIOH, GPIO_AF_14, GPIO_PIN_13);gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_0);gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_1);gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3);gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_3);gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_7);gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_1);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_15);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_15);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_14);gpio_mode_set(GPIOH, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_13);gpio_output_options_set(GPIOH, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_13);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_0);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_0);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_1);/* configure LCD_B7(PB9), LCD_B6(PB8), LCD_B5(PB5), LCD_B4(PC11), LCD_B3(PG11),LCD_B2(PG10), LCD_B1(PG12), LCD_B0(PG14) */gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_9);gpio_af_set(GPIOB, GPIO_AF_14, GPIO_PIN_8);gpio_af_set(GPIOB, GPIO_AF_3, GPIO_PIN_5);gpio_af_set(GPIOC, GPIO_AF_14, GPIO_PIN_11);gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_11);gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_10);gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_12);gpio_af_set(GPIOG, GPIO_AF_14, GPIO_PIN_14);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_9);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_9);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_8);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_8);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_5);gpio_mode_set(GPIOC, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_11);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_11);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_10);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_12);gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_14);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_14);/* configure LCD_DE(PF10) */gpio_af_set(GPIOF, GPIO_AF_14, GPIO_PIN_10);gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10);gpio_output_options_set(GPIOF, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_10);/* LCD PWM BackLight(PG13) */gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13);gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_13);gpio_bit_set(GPIOG, GPIO_PIN_13);
}/*!\brief      enable the CPU cache\param[in]  none\param[out] none\retval     none
*/
static void cache_enable(void)
{/* enable i-Cache */SCB_EnableICache();/* enable d-Cache */SCB_EnableDCache();
}

http://m.aloenet.com.cn/news/39486.html

相關(guān)文章:

  • 可信的大連網(wǎng)站建設(shè)成都百度推廣優(yōu)化創(chuàng)意
  • 浙江建設(shè)職業(yè)學(xué)校網(wǎng)站刷網(wǎng)站軟件
  • 公司網(wǎng)站建設(shè)方案百度推廣管理系統(tǒng)
  • 黃驊港十里金沙灘門(mén)票重慶網(wǎng)站seo技術(shù)
  • js網(wǎng)站評(píng)論框小紅書(shū)推廣價(jià)目表
  • 華強(qiáng)北 做網(wǎng)站海外推廣營(yíng)銷(xiāo)平臺(tái)
  • 對(duì)互聯(lián)網(wǎng)網(wǎng)站的理解網(wǎng)站維護(hù)費(fèi)用
  • 網(wǎng)站權(quán)重為零百度快速優(yōu)化排名軟件
  • 網(wǎng)站打開(kāi)速度很慢濟(jì)南疫情最新情況
  • 深圳建筑業(yè)協(xié)會(huì)石家莊seo顧問(wèn)
  • 博野網(wǎng)站建設(shè)江西省水文監(jiān)測(cè)中心
  • linux怎么做網(wǎng)站怎么提高關(guān)鍵詞搜索權(quán)重
  • 網(wǎng)站正在開(kāi)發(fā)中鄭州谷歌優(yōu)化外包
  • wordpress下拉篩選重慶做seo外包的
  • wordpress科技主題網(wǎng)站排名優(yōu)化公司
  • seo優(yōu)化排名推廣排名優(yōu)化系統(tǒng)
  • 網(wǎng)頁(yè)設(shè)計(jì)模板網(wǎng)站推薦外包網(wǎng)絡(luò)推廣公司
  • 上海網(wǎng)站開(kāi)發(fā)公司外包自學(xué)seo能找到工作嗎
  • asp網(wǎng)站制作設(shè)計(jì)教程佛山網(wǎng)站優(yōu)化軟件
  • 海南省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站首頁(yè)排名前50名免費(fèi)的網(wǎng)站
  • 網(wǎng)站建設(shè) 云計(jì)算搜索數(shù)據(jù)
  • wordpress企業(yè)網(wǎng)站制作鄭州seo優(yōu)化
  • 這幾年做啥網(wǎng)站致富推廣鏈接讓別人點(diǎn)擊
  • 門(mén)戶(hù)網(wǎng)站建設(shè)如何入賬銅陵seo
  • 美國(guó)十大購(gòu)物網(wǎng)站免費(fèi)注冊(cè)個(gè)人網(wǎng)站不花錢(qián)
  • 長(zhǎng)安東莞網(wǎng)站設(shè)計(jì)百度掃一掃識(shí)別圖片在線
  • logo設(shè)計(jì)培訓(xùn)寧波seo網(wǎng)絡(luò)推廣優(yōu)化價(jià)格
  • 網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)中怎么添加頁(yè)碼信息谷歌海外推廣
  • 網(wǎng)站方案策劃5118營(yíng)銷(xiāo)大數(shù)據(jù)
  • wordpress屏蔽垃圾國(guó)外ip領(lǐng)碩網(wǎng)站seo優(yōu)化