【LVGL】移植篇(正點原子教程)
引言
學習 LVGL 的同時,記錄學習過程,分享踩坑經歷。
LVGL
下面都是從正點原子的 pptx 中截取下來的,他們寫的很詳細了。
GUI 簡介

LVGL 簡介

LVGL 移植要求

優化 LVGL 的方法

LVGL 庫文件

前置知識

正點原子移植教程
正點原子的移植教程非常詳細,他們使用的是 LVGL v8.2 版本的,現在 LVGL v8 版本最高也才到了 v8.4 版本,所以我們可以直接移植 LVGL v8.4 版本的,移植大體上沒有什么區別。
踩坑
屏幕顯示不正常
解決方法: 在 startup_stm32h743xx.s 文件中將棧大小從 0x400 修改為 0x800。
屏幕顯示正常觸摸無效
解決方法: 由于是觸摸的問題,我們就在觸摸上找問題。在 lv_port_indev_template.c 文件中找到以下函數:
static bool touchpad_is_pressed(void)
{
/*Your code comes here*/
gtxxxx_scan();
if (gtxxxx_dev.sta & TP_PRES_DOWN) /* 如果檢測到被按下,返回真 */
{
return true;
}
return false; /* 否則返回假 */
}
將if (gtxxxx_dev.sta & TP_PRES_DOWN)修改為if (gtxxxx_dev.sta & (TP_PRES_DOWN >> 15)),并且將正點原子提供代碼中的TP_PRES_DOWN都改為(TP_PRES_DOWN >> 15)。
附 TOUCH 程序:【LTDC】RGB LCD 電容觸摸屏的配置和程序
原因: 正點原子提供的程序中對于狀態位 sta 的處理是這樣的:
#define TP_PRES_DOWN 0x8000 /* 觸屏被按下 */
#define TP_CATH_PRES 0x4000 /* 有按鍵按下了(兼容電阻屏) */
/* 狀態位賦值 */
gtxxxx_rd_reg(GTXXXX_GSTID_REG, &mode, 1); /* 讀取觸摸點的狀態 */
temp = 0XFFFF << (mode & 0XF); /* 將點的個數轉換為1的位數,匹配tp_dev.sta定義 */
gtxxxx_dev.sta = (~temp) | TP_PRES_DOWN;
/* 狀態位恢復 */
if ((mode & 0X8F) == 0X80) /* 無觸摸點按下 */
{
if (gtxxxx_dev.sta & (TP_PRES_DOWN >> 15)) /* 之前是被按下的 */
{
gtxxxx_dev.sta &= ~(TP_PRES_DOWN >> 15); /* 標記按鍵松開 */
}
else /* 之前就沒有被按下 */
{
gtxxxx_dev.x[0] = 0xffff;
gtxxxx_dev.y[0] = 0xffff;
gtxxxx_dev.sta &= 0XE000; /* 清除點有效標記 */
}
}
通過調試,我們可以知道,當只有一個觸點按下的時候:
tamp 的值為0xFFFE,即1111 1111 1111 1111 1111 1111 1111 1110。
則~tamp 的值為0x0001,即0000 0000 0000 0001。
TP_PRES_DOWN 的值為0x8000,即1000 0000 0000 0000。
(~temp) | TP_PRES_DOWN 的值即為1000 0000 0000 0001
sta & TP_PRES_DOWN 的值即為0000 0000 0000 0000
那么這個按鍵按下的接口函數中的 if 將永遠都不會進入。
static bool touchpad_is_pressed(void)
{
/*Your code comes here*/
gtxxxx_scan();
if (gtxxxx_dev.sta & TP_PRES_DOWN) /* 如果檢測到被按下,返回真 */
{
return true;
}
return false; /* 否則返回假 */
}
故采取將TP_PRES_DOWN >> 15右移15位的方法,得到0000 0000 0000 0001,使其可以正常運行。
當然,找到問題以后,解決的方法有很多,看你怎么選擇。
總結
移植篇就到此結束了,跟著正點原子的視頻來移植,不會很困難,就是有點繁瑣,不過前提是你要非常熟悉文件管理相關的內容,才不至于眼花繚亂。主要就是踩的這兩個坑,特別是第二個坑花了我點時間去尋找,網上搜索也沒有答案,故在此分享出來,給需要幫助的人看到是最好的。
博客導航
本文來自博客園,作者:膝蓋中箭衛兵,轉載請注明原文鏈接:http://www.rzrgm.cn/Skyrim-sssuuu/p/19189391

浙公網安備 33010602011771號
https://orcid.org/0000-0001-5102-772X