最近學到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...