LCD TFT控制總結

2021-08-21 23:36:58 字數 2236 閱讀 2958

最近學到lcd了,但是在將野火的**轉移到cubemx時卻遇到了**煩,螢幕一直是花的,只有一次正常顯示一下下,但是過一段時間就又沒了,好幾天的時間都找不到問題。

找到問題的方法是我昨天才想到的,前些天就像無頭蒼蠅一樣到處亂竄,花了很多時間,但是沒有用對方法,都是無用功。

後來想到,lcd使用sdram最為視訊記憶體,那麼只需要讀取sdram中的資料就知道為什麼顯示會有問題了。

通過訪問sdram中的視訊記憶體的位址,就可以直接得到sdram中的資料。

首先測試清屏函式,讀取sdram中的資料在清屏前和清屏後的資料有什麼不同。

1  printf("%s\n","-----d000 after clear-----");

2  uint32_t i;

3  uint8_t ubreaddata_8b=0;

4  for (i=0; i<200; i++) 

8 9  printf("\n%s\n","-----d000 after clear-----");

1011  printf("%s\n","-----d020 after clear-----");

1213  for (i=0; i<200; i++) 

1718  printf("\n%s\n","-----d020 after clear-----");

發現清屏前後資料沒有變化,都是一些隨機的資料,因此可以推斷清屏函式出了問題。

再看看清屏函式(lcd_clear),呼叫了另外乙個函式,可以推斷應該是ll_fillbuffer這個函式出了問題。

1static void ll_fillbuffer(uint32_t layerindex, void *pdst, uint32_t xsize, uint32_t ysize, uint32_t offline, uint32_t colorindex)

2

之前使用的dma2d的r2m模式,我使用m2m模式顯示發現正常,方法參照微雪課堂,再次確認ll_fillbuffer這個函式出了問題。

看看ll_fillbuffer這個函式

1static void ll_fillbuffer(uint32_t layerindex, void *pdst, uint32_t xsize, uint32_t ysize, uint32_t offline, uint32_t colorindex) 

2 8  else if(ltdc_handler.layercfg[activelayer].pixelformat == ltdc_pixel_format_argb8888)

9  ...

1011  /* dma2d 初始化 */

12  if(hal_dma2d_init(&dma2d_handler) == hal_ok) 

13  

21    }

22  } 

23}

它這裡操作的是dma2d_handler這個結構體,但是我用cubemx生成**使用的是hdma2d這個結構體,再我將dma2d_handler替換為hdma2d後,程式執行正常。

液晶面板的訊號線如下

訊號名稱

說明r[7:0]

紅色資料

g[7:0]

綠色資料

b[7:0]

藍色資料

clk畫素同步時鐘訊號

hsync

水平同步訊號

vsync

垂直同步訊號

de資料使能訊號

ltdc作為液晶控制器可以使用sdram中的部分空間作為視訊記憶體,直接控制液晶面板。

我們需要做的就是參考液晶屏的資料,將液晶屏的畫素、控制時序等對ltdc進行初始化,ltdc就會自動對液晶屏進行重新整理控制。

dma2d用於影象資料搬運、混合及格式轉換

有四種模式:dma2d_m2m、dma2d_m2m_pfc、dma2d_m2m_blend、dma2d_r2m

暫時只用過m2m和r2m,覺得m2m最好用了,將轉為陣列,開啟儲存器到儲存器的dma,通過hal_dma2d_start_it傳輸就好了。

fmc用於操作sdram,通過不斷重新整理sdram保證資料的正確性

**已上傳github

控制理論總結

經典控制理論 現代控制理論 線性控制理論 非線性控制理論 最優控制 控制 魯棒控制 數字控制系統 連續控制系統 隨動系統 線性定常系統微分方程的一般形式 當方程中有數字就不能滿足疊加性原理。線性系統的主要特點是具有齊次性和疊加性,系統響應與初始狀態無關,系統的穩定系與輸入訊號無關。如果控制系統有乙個...

linux 併發控制總結

atomic t atomic t atom atomic init 1 atomic dec and test atom atomic inc atom spin lock t spinlock t lock spin lock init lock define spinlock lock spi...

git 版本控制總結

git config global user.name 名字 git config global user.email 郵箱 git config global l 檢視git的配置 git config global e 進入vim檢視git的配置 每次提交只能把暫存區的提交 staging ar...