RT-Thread學習筆記系列之littlevgl GUI(3)

前言

隨着物聯網、智能家居、智能控制等行業的極速發展,小而美的且反應迅速且成本低的,模塊化,定製化的嵌入式系統的需求愈來愈大,其中下降使用要求,提升用戶體驗,人機交互是一個很是好的方法,因此本文記錄的是調試rtthread+lcd+littlevgl GUI的記錄及流程模塊化

1、資源介紹

硬件是自行畫的PCB板,資源以下函數

  • MCU:STM32F407ZGT6
  • LCD:3.2寸320*240分辨率,驅動芯片:ILI9341。 引腳除了RESET和背光控制引腳,其餘引腳鏈接均和正點原子的STM32F407探索者開發板兼容
  • 使用FSMC接口驅動

軟件是使用rtthread studio1.1.5版本學習

2、配置過程

添加littlevgl2rtt軟件包

在這裏插入圖片描述
配置以下
其中DPI計算方法:
用勾股定理,好比5寸屏(屏幕的寸數就是對角線的長度),1080*1920分辨率,dpi就是sqrt(1080^2 + 1920^2) / 5=440。
因此個人計算獲得是125
在這裏插入圖片描述
LCD屏幕配置及驅動註冊請參考上一篇
RT-Thread學習筆記系列之LCD驅動及emwin示例(2)






測試

保存編譯無誤下載屏幕卻沒有任何顯示,LCD屏幕是驗證過的,這個軟件包也有不少人使用過(頭大,沒辦法只能一步步分析了)url

分析過程

  • 方法:spa

    • 先參考別人使用這個軟件包的例子和過程
    • 對比二者之間的區別
    • 參考官方的demo和文檔介紹
  • 查找過程:.net

    • 這個軟件包做者是在RT1050 fire的板子,lcd爲800*480進行測試
    • 官方有使用ART-PI開發板進行直播使用過
    • 論壇也有不少小夥伴也是直接使用ART-PI開發板直接使用BSP驅動成功過
    • 我手上有ART-PI開發板可是屏幕接口不兼容沒法直接驗證,既然別人一步成功,那卻別確定是驅動或者接口方面的問題,本身直接建立一個art-pi模板的BSP工程,使能LCD驅動,對比二者的區別,再對比接口的區別。任何屏幕顯示底層無非都是打點,刷新,顯示打開這幾個步驟。因此最終找到了區別以下:
  • 區別指針

    • ART-PI的LCD驅動的結構體有使用到官方對圖像定義的rt_device_graphic_info結構體並分配了內存給指針framebuffer,因此該指針不爲空,而個人LCD驅動是沒有使用
    • littlevgl2rtt軟件包中得接口驅動文件littlevgl2rtt.c中初始化函數littlevgl2rtt_init對刷新回調函數是有作區分的
      在這裏插入圖片描述
    • 官方的示例文件中的介紹
      在這裏插入圖片描述
      -刷新函數lcd_fb_flushlcd_flush的區別

static void lcd_fb_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{ 
    int x1, x2, y1, y2;
	.
	.//中間代碼省略
	.
    rt_device_control(device, RTGRAPHIC_CTRL_RECT_UPDATE, &rect_info);

    lv_disp_flush_ready(disp_drv);
}

static void lcd_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
{ 
    int x1, x2, y1, y2;    
	.
	.//中間代碼省略
	.
    //TODO color convert
    for (y = act_y1; y <= act_y2; y++)
    { 
        rt_graphix_ops(device)->blit_line((const char *)color_p, act_x1, y, act_x2 - act_x1 + 1);
        color_p += (x2 - x1 + 1);
    }
}

發現個人驅動使用的刷新函數沒有lv_disp_flush_ready(disp_drv);沒有通知圖形庫,在lcd_flush函數的最後面加上這句就行了,而後編譯下載
在這裏插入圖片描述
顯示正常了,說明驅動已經成功,可是每一個窗口太大了(按照計算方法確實是125,可能長寬比緣由littlevgl認爲這樣是最佳的顯示把),調節一下DPI爲80(本人不斷的調節認爲比較好的一個數值),顯示比較合理

調試

在這裏插入圖片描述

總結

  • 遇到問題不要灰心,不要放棄,白嫖黨是沒有競爭力的,成爲有競爭力的人是你能去解決問題
  • 若是有現成的例子,對比法是簡單有消的方法
  • 先要清楚原理,就像LCD屏幕底層就是打點,打開顯示等幾個步驟,能夠經過斷點或log判斷是否有執行
  • 多看官方的文檔和demo,官方的通常都是比較嚴格可靠的,細心點查找避免忽略重要的信息
相關文章
相關標籤/搜索