国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LVGL學(xué)習(xí)筆記(二):從0到1移植LVGL8.1到STM32平臺上(完結(jié)篇)

這篇具有很好參考價(jià)值的文章主要介紹了LVGL學(xué)習(xí)筆記(二):從0到1移植LVGL8.1到STM32平臺上(完結(jié)篇)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一:TFT-LCD屏觸摸

二:STM32CubeMX配置

三:FT5206觸摸芯片驅(qū)動代碼移植

四:LVGL 移植

4.1 源碼下載

4.2?代碼移植

?4.3 添加源碼至工程

4.4?指定頭文件路徑

4.5 設(shè)置編譯參數(shù)

?4.6?修改LVGL源文件

??4.7 修改顯示驅(qū)動接口

???4.8?修改輸入設(shè)備驅(qū)動接口

?五:下載驗(yàn)證

?六:工程代碼


·?廢話不多說,有關(guān)電容屏的觸摸原理,此文不作解釋,自己去看

· 確定自己的觸摸屏的驅(qū)動IC是什么型號的,找供應(yīng)商要驅(qū)動源代碼

·?我使用的是正點(diǎn)原子ALIENTEK 7’ TFTLCD 電容觸摸屏,驅(qū)動IC為FT5206

一:TFT-LCD屏觸摸

·?廢話不多說,有關(guān)電容屏的觸摸原理,此文不作解釋,自己去看

· 確定自己的觸摸屏的驅(qū)動IC是什么型號的,找供應(yīng)商要驅(qū)動源代碼

·?我使用的是正點(diǎn)原子ALIENTEK 7’ TFTLCD 電容觸摸屏,驅(qū)動IC為FT5206

原理圖

lvgl stm32,學(xué)習(xí)

·?從圖中可以看出, T_MOSI、T_MISO、T_SCK、T_CS 和 T_PEN 分別連接在
STM32F1 的:PF9、PB2、PB1、PF11 和 PF10 上,電容式觸摸屏沒有用到
T_MISO,而是用到四根線,分別是: T_PEN(CT_INT)、 T_CS(CT_RST)、
T_CLK(CT_SCL) 和T_MOSI(CT_SDA)。

·?其中:CT_INT、CT_RST、CT_SCL 和 CT_SDA 分別是 FT5206的:中斷輸出
信號、復(fù)位信號,IIC 的 SCL 和 SDA 信號(PS:為了節(jié)省CPU開支,可以
使用外部中斷的方式判斷屏幕是否被觸摸,具體設(shè)置方式,此文不作介紹)

二:STM32CubeMX配置

· 打開我們上節(jié)配置的CubeMx工程

· 軟件模擬IIC

· 配置以下4個(gè)引腳

lvgl stm32,學(xué)習(xí)

lvgl stm32,學(xué)習(xí)

?· 檢查引腳無誤后,生成代碼,編譯后無問題,開始移植觸摸芯片代碼

三:FT5206觸摸芯片驅(qū)動代碼移植

· 我使用的正點(diǎn)原子的屏幕,所以我直接移植正點(diǎn)原子編寫的FT5206驅(qū)動代碼

· 如果你們用的是其它廠商的代碼,直接問他們要觸摸芯片的驅(qū)動代碼就行了

· 以下移植步驟局限于正點(diǎn)原子的屏幕

· 將此文件夾,復(fù)制至自己的工程文件下

lvgl stm32,學(xué)習(xí)

lvgl stm32,學(xué)習(xí)

· 添加 .c和 .h文件

lvgl stm32,學(xué)習(xí)

. 我的觸摸芯片是FT5206,所以加入這幾個(gè)源文件即可

. 把所有.c 文件中的printf函數(shù)屏蔽掉,因?yàn)槲覀冞@里是沒有開啟串口,會導(dǎo)致程序卡死!!!!!!!!!!

· 把正點(diǎn)原子觸摸屏實(shí)驗(yàn)下的sys文件拷貝至自己的工程文件,并添加.c 和 .h文件

lvgl stm32,學(xué)習(xí)

lvgl stm32,學(xué)習(xí)

· 打開lcd.h 頭文件,屏蔽#include "stm32f103xe.h",添加sys.h

lvgl stm32,學(xué)習(xí)

· 打開sys.h 頭文件,添加stm32f103xe.h頭文件

lvgl stm32,學(xué)習(xí)

?· 打開ctiic.c,屏蔽CT_IIC_Init()函數(shù)里的內(nèi)容,并屏蔽delay.h,添加tim.h

lvgl stm32,學(xué)習(xí)

lvgl stm32,學(xué)習(xí)

· 打開ft5206.c,增加tim.h,屏蔽usart.h,delay.h

lvgl stm32,學(xué)習(xí)

· 屏蔽FT5206_Init(void)函數(shù)以下內(nèi)容

· 打開touch.c文件,把電阻屏用到的相關(guān)接口屏蔽掉

lvgl stm32,學(xué)習(xí)

?lvgl stm32,學(xué)習(xí)

?lvgl stm32,學(xué)習(xí)

?lvgl stm32,學(xué)習(xí)

·?TP_Init(void)函數(shù),只留下以下部分,其余屏蔽掉

lvgl stm32,學(xué)習(xí)

?·?打開main.c,添加touch.h頭文件

lvgl stm32,學(xué)習(xí)

?· 在main函數(shù)添加以下三個(gè)函數(shù)的全部內(nèi)容

lvgl stm32,學(xué)習(xí)

· 移植完成后、編譯、燒錄

· 觸摸效果展示

lvgl stm32,學(xué)習(xí)

四:LVGL 移植

4.1 源碼下載

  • Github倉庫:http:/github.com/lvgl/lvgl

lvgl stm32,學(xué)習(xí)

4.2?代碼移植

· 在自己的工程文件下新建兩個(gè)文件夾 GUI 和 GUI_APP

?lvgl stm32,學(xué)習(xí)

在GUI目錄下新建兩個(gè)文件夾 lvgl 和lvgl_port

lvgl stm32,學(xué)習(xí)

· 將LVGL源碼目錄下的src文件夾以及 lvgl.h 頭文件拷貝至工程文件GUI/lvgl目錄下

lvgl stm32,學(xué)習(xí)

· 把lvgl源碼根目錄下的lv_conf_template.h 拷貝至工程文件下GUI根目錄下,
   并且去掉_template

lvgl stm32,學(xué)習(xí)

?4.3 添加源碼至工程

在MDK里面新建以下這兩個(gè)文件

lvgl stm32,學(xué)習(xí)? ? ? ??

?在GUI/lvgl組中添加以下文件夾中所有的.c文件:

GUI/lvgl/src/lv_core
GUI/lvgl/src/lv_draw
GUI/lvgl/src/lv_extra(除了lib外,除非你用到了相關(guān)功能)
GUI/lvgl/src/lv_font
GUI/lvgl/src/lv_hal
GUI/lvgl/src/lv_misc
GUI/lvgl/src/lv_themes
GUI/lvgl/src/lv_widgets
//注意不要添加 GUI/lvgl/src/lv_gpu 中的文件,除非你用到了相關(guān)功能

在GUI/lvgl_port組中添加以下.c文件:

GUI/lvgl_port/lv_port_disp.c
GUI/lvgl_port/lv_port_indev.c
//注意不要添加 GUI/lvgl_port/lv_port_fs.c 中的文件,除非你用到了相關(guān)功能

lvgl stm32,學(xué)習(xí)

4.4?指定頭文件路徑

LVGL 的源碼已經(jīng)添加到開發(fā)環(huán)境的組文件夾下面,編譯的時(shí)候需要為這些源文件指定頭文件的路徑,不然編譯會報(bào)錯(cuò)。只需要將?GUI、GUI/lvgl、GUI/lvgl_port?的路徑在開發(fā)環(huán)境里面指定即可。

lvgl stm32,學(xué)習(xí)

4.5 設(shè)置編譯參數(shù)

LVGL要求 C99 或更新的編譯器,否則編譯是會報(bào)錯(cuò)的。

lvgl stm32,學(xué)習(xí)

?4.6?修改LVGL源文件

· 打開lv_conf.h 頭文件,將第15行改為1
· 第27行是顏色設(shè)置,如果是單色屏的話就改為1

lvgl stm32,學(xué)習(xí)

內(nèi)存設(shè)置
給LVGL分配動態(tài)內(nèi)存RAM的大小,至少需要2k,資源允許的情況下可以稍微設(shè)大些,這個(gè)設(shè)置過小的話,在跑一些稍微復(fù)雜的demo時(shí)界面就會刷不出來。

lvgl stm32,學(xué)習(xí)

?· 底層設(shè)置

· 第88行,如果LV_TICK_CUSTOM == 0,可以用lv_tick_inc()提供時(shí)鐘節(jié)拍,也就是將
  lv_tick_inc(1)放在我們上節(jié)開啟的定時(shí)器6中斷里調(diào)用即可

· 如果LV_TICK_CUSTOM == 1,就無須在應(yīng)用程序中主動調(diào)用 lv_tick_inc(x) 函數(shù),而是需要定義一個(gè) 獲取當(dāng)前系統(tǒng)已運(yùn)行時(shí)間的函數(shù)(例如HAL_GetTick())
 
· 第90行就是提供時(shí)鐘節(jié)拍函數(shù)所在的頭文件

· 第91行就是提供時(shí)鐘節(jié)拍的函數(shù)

· 我這里直接使用sys_tick為LVGL提供時(shí)鐘節(jié)拍

· 第96行用來調(diào)節(jié)界面縮放比例的,此值越大,控件分布的就越散,控件自身的間隔也會
  變大。可根據(jù)實(shí)際情況進(jìn)行更改,例如128x128分辨率1.44英寸的屏幕,那么 DPI = ((√128*128) / 1.44) ≈ 89

lvgl stm32,學(xué)習(xí)

??4.7 修改顯示驅(qū)動接口

? ? ? ? 打開lv_port_disp.c

· 將第7行修為1

· 第12行去掉_template

· 第19 20行定義屏幕像素高度

lvgl stm32,學(xué)習(xí)

· 第54行,可以將屏幕的顯示驅(qū)動初始化接口放進(jìn)disp_init()函數(shù),該函數(shù)在下方定義
  我這里是沒有放進(jìn)去,直接在main函數(shù)哪里初始化了,看個(gè)人需求,我比較懶!

lvgl stm32,學(xué)習(xí)

· 顯示緩沖區(qū)初始化有三種方式,這里使用的是方式1,方式1消耗的硬件資源最小,但運(yùn)行效果也是最差的,三種方式如下

· 第一種只創(chuàng)建一個(gè)緩存區(qū),長度是橫軸像素長度的 10 倍

· 第二種創(chuàng)建兩個(gè)緩存區(qū),長度都是橫軸的 10 倍,可以結(jié)合 DMA 加快寫入速度

· 第三種則是創(chuàng)建兩個(gè),大小是橫軸乘以縱軸,相當(dāng)于整個(gè)屏幕大小

lvgl stm32,學(xué)習(xí)

· 第108、109行修改為上方屏幕分辨率的宏定義

lvgl stm32,學(xué)習(xí)

·?修改?disp_flush()?函數(shù),將自己顯示屏對應(yīng)的填充顏色塊函數(shù)放到這里,這個(gè)函數(shù)是用來刷新顯示區(qū)域的,速度越快越好

紅色標(biāo)注部分的函數(shù)也就是以單個(gè)像素點(diǎn)填充屏幕的函數(shù)

lvgl stm32,學(xué)習(xí)

???4.8?修改輸入設(shè)備驅(qū)動接口

? ? ? ? 打開lv_port_disp.c

· 第7行修改為1

· 第12行去掉_template

· 第14行增加touch.h頭文件

lvgl stm32,學(xué)習(xí)

· 找到lv_port_indev_init(void)函數(shù)

· 將屏幕觸摸驅(qū)動接口初始化放進(jìn)touchpad_init();

· touchpad_init();在下方有定義,我這里就不放了,因?yàn)樵趍ain函數(shù)已經(jīng)初始化了,我比較懶

lvgl stm32,學(xué)習(xí)

·? 注冊一個(gè)輸入設(shè)備,輸入設(shè)備可以是觸摸屏、鼠標(biāo)、鍵盤、編碼器、按鍵,這里我們只使用觸摸屏,第99行往后的代碼全部注釋。lvgl stm32,學(xué)習(xí)

?· 修改touchpad_read函數(shù)

· 以下代碼局限于正點(diǎn)原子的板子,具體寫法參考你所用的板子

static uint16_t last_x = 0;
static uint16_t last_y = 0;
	
if(tp_dev.sta&TP_PRES_DOWN)//觸摸按下了
{
	last_x = tp_dev.x[0];
	last_y = tp_dev.y[0];
	data->point.x = last_x;
	data->point.y = last_y;
	data->state = LV_INDEV_STATE_PR;
}
else
{//觸摸松開了
	data->point.x = last_x;
	data->point.y = last_y;
	data->state = LV_INDEV_STATE_REL;
}

lvgl stm32,學(xué)習(xí)

?· 打開lv_port_indev.h

? ?使能文件及聲明函數(shù)

lvgl stm32,學(xué)習(xí)

??· 打開main.c

#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lvgl.h"

lvgl stm32,學(xué)習(xí)

lv_port_disp_init();       
lv_port_indev_init();       
lvgl_first_demo_start();


tp_dev.scan(0);
lv_timer_handler();

· 第272行是屏幕觸摸掃描函數(shù)

lvgl stm32,學(xué)習(xí)

?五:下載驗(yàn)證

video(11)

?六:工程代碼

鏈接:https://pan.baidu.com/s/1HjQSt3Lb4xQe9VRjZbPcSQ?
提取碼:h1xu文章來源地址http://www.zghlxwxcb.cn/news/detail-776157.html

到了這里,關(guān)于LVGL學(xué)習(xí)筆記(二):從0到1移植LVGL8.1到STM32平臺上(完結(jié)篇)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 學(xué)習(xí)筆記ESP32——lvgl disp移植(1)

    學(xué)習(xí)筆記ESP32——lvgl disp移植(1)

    目錄 一、簡介 二、GitHub上下載lvgl庫 ????????1、下載lvgl庫 三、準(zhǔn)備一個(gè)工程 ?四、修改工程 ?五、對disp進(jìn)行修改 ?編輯 六、主函數(shù)的修改 七、硬件的修改 八、MUSIC示例演示 一、簡介 ? ? ? ? 以esp32 idf導(dǎo)出的hello world例程,移植lvgl disp和indev驅(qū)動的學(xué)習(xí)筆記。 二、Gi

    2024年01月16日
    瀏覽(23)
  • 【快速入門 LVGL】-- 1、STM32 工程移植 LVGL

    【快速入門 LVGL】-- 1、STM32 工程移植 LVGL

    目錄 一、LVGL?簡述 二、復(fù)制一個(gè)STM32工程 三、下載 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件? 六、注冊?顯示 七、注冊?觸摸屏 八、LVGL 心跳、任務(wù)刷新 九、開跑 LVGL? 十、控件的事件添加、響應(yīng)處理 十?一、幾個(gè)好玩小事情 十?二、顯示中文 豐富且強(qiáng)大的模塊化圖形組

    2024年04月27日
    瀏覽(19)
  • idf lvgl8顯示觸摸移植,st7789v+cst816

    idf lvgl8顯示觸摸移植,st7789v+cst816

    用到的所有文件鏈接 我整理的lvgl文件:https://gitee.com/BHJ2022/lvgl.git gsm項(xiàng)目地址:https://gitee.com/gsm-wheather-project 1)將gsm中的屏幕及觸摸驅(qū)動(touch_screen文件夾)直接復(fù)制到lvgl_disp_indev的component文件中 2)修改touch_screen的cmakelist如圖 3)將gsm中的main中的include直接復(fù)制到lvgl_disp_

    2024年02月07日
    瀏覽(20)
  • STM32移植LVGL(LittleVGL)

    STM32移植LVGL(LittleVGL)

    https://lvgl.io/ 這是LVGL的官網(wǎng), http://lvgl.100ask.org/8.2/intro/index.html 這是lvgl的中文介紹網(wǎng)站。 先通過這兩個(gè)網(wǎng)站大致了解一下lvgl,在后面移植時(shí)會有個(gè)大概了解,移植起來會更清晰易懂。 1、準(zhǔn)備STM32工程 1、先準(zhǔn)備所用到的屏幕的顯示和觸摸(有觸摸功能的屏幕)的工程。我這

    2023年04月16日
    瀏覽(24)
  • stm32 移植 LVGL 基礎(chǔ)工程

    stm32 移植 LVGL 基礎(chǔ)工程

    注意:這里只是本人的一些學(xué)習(xí)心得,和對移植的理解,不明白之處還得去跟著官方教程學(xué)學(xué)! 開發(fā)板使用的是 stm32f103zet6 芯片 準(zhǔn)備 LVGL 源碼 8.3 版本 定時(shí)器實(shí)驗(yàn) 觸摸屏實(shí)驗(yàn)(使用 3.5的 屏幕) 1、使用觸摸屏實(shí)驗(yàn)為主體來配置文件 (1)把觸摸屏實(shí)驗(yàn)改為 LVGL 移植實(shí)驗(yàn) (

    2024年01月20日
    瀏覽(19)
  • LVGL觸摸移植——stm32野火F103

    LVGL觸摸移植——stm32野火F103

    目錄 系列文章目錄 章目錄 目標(biāo) 一、認(rèn)識端口文件 二、使能?lv_port_indev.c? 三、接口函數(shù) 1.輸入設(shè)備初始化 四、Main函數(shù) 五、過程中的疑難雜癥 1.內(nèi)存不足 2、LCD白屏 五、效果 總結(jié) 在顯示的基礎(chǔ)上添加觸摸輸入 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 這兩個(gè)是

    2024年02月11日
    瀏覽(29)
  • STM32移植LVGL+旋轉(zhuǎn)編碼器接口對接

    STM32移植LVGL+旋轉(zhuǎn)編碼器接口對接

    寫在前面:本菜鳥結(jié)合了許多大佬的文章,成功實(shí)現(xiàn)了基于LVGL的GUI設(shè)計(jì),小開心~淺淺記錄一下!~ 本文以單片機(jī)STM32F103VET6為核心,利用ST7796芯片驅(qū)動分辨率為480*320的LCD液晶屏模塊,移植LVGL,對接顯示接口,對接外部接口——旋轉(zhuǎn)編碼器,完成以上兩步,就可以實(shí)現(xiàn)LVGL的顯

    2024年02月10日
    瀏覽(45)
  • LVGL8.1版本筆記

    之前學(xué)過LVGL6,現(xiàn)在版本更新到LVGL8了,學(xué)習(xí)下新版本,本文主要是記錄一些LVGL8的新特性,區(qū)別和lvgl6的不同之處 。 lv_task_handler()的作用: 鏈接: lv_task_handler()是什么,lvgl到底在while(1)中做了什么 總結(jié):lv_task_handler()中,調(diào)用lv_indev_read_task()來處理輸入信息,當(dāng)沒有輸入時(shí),whi

    2024年01月16日
    瀏覽(22)
  • 【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    【LVGL】STM32F103ZET6——LVGL_GUI_GUIDER移植過程成功

    STM32F103ZET6——LVGL_GUI_GUIDER移植過程 STM32F103ZET6——LVGL_GUI_GUIDER移植過程 使用工具: 1.LVGL庫8.02 2.GUI_GUIDER 3.keil5 設(shè)計(jì)出來的總體是這樣 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 這部分有很多大佬已經(jīng)寫的很成熟了,我就不贅述了 安裝包在這里硬件資源 右上角可將

    2024年02月12日
    瀏覽(54)
  • SquareLine studio設(shè)計(jì)LVGL工程,移植到stm32的過程

    SquareLine studio設(shè)計(jì)LVGL工程,移植到stm32的過程

    ? ? ? ? 本文主要是給大家介紹一下如何將SquareLine studio設(shè)計(jì)的LVGL工程,移植到stm32的LCD液晶顯示屏上。 本文做好的移植模板在這(移植模板),模板可以直接在正點(diǎn)原子stm32f103ze系列板子上運(yùn)行測試。顯示屏使用的是4.3寸屏幕(像素800*480) ? ? ? ? ·以我自己設(shè)計(jì)的LVGL工程

    2024年02月03日
    瀏覽(139)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包