【LVGL】STM32F429IGT6(在野火官網的LCD例程上)移植LVGL官方的例程(還沒寫完,有問題 排查中)

這里寫目錄標題

  • 前言
  • 一、本次實驗準備
    • 1、硬件
    • 2、軟件
  • 二、移植LVGL代碼
    • 1、獲取LVGL官方源碼
    • 2、整理一下,下載后的源碼文件
    • 3、開始移植
  • 三、移植顯示驅動
    • 1、enable LVGL
    • 2、修改報錯部分
    • 3、修改lv_config
    • 4、修改lv_port_disp.c文件
    • 到此步遇到的問題 Undefined symbol __aeabi_assert (referred from mbrtu.o).
      • 解決方法
    • 5.顯示測試
      • c.配置定時器,在定時器中斷中給lvgl 設置“心跳“ 或者直接用 滴答定時器作為心臟也行
        • 法一
        • 法二
      • 好,上一步結束,繼續配置
    • main里最終是這樣的
  • 還沒寫完,有問題 排查中。。。。

前言

記錄一下我的移植過程,方便以后回頭翻看

一、本次實驗準備

1、硬件

一塊野火的STM32F429IGT6開發板和7寸的觸摸屏;

2、軟件

  1. 官方的源碼 hal庫的,點擊進入野火官網 下載源碼
    在這里插入圖片描述

  2. 把定時器中斷實驗的代碼移植到觸摸屏實驗那里,用于后續給lvgl提供心跳時間 (如果移植后遇到Error: L6218E:在文件中添加stm32f10x_tim.c即可)

    我發現例程里已經有了,可以直接include頭文件。

在這里插入圖片描述

  1. 將程序下載進開發板,觸摸顯示正常即可
    這款板子如果要觸摸正常,則要把代碼中的宏修改一下
    在這里插入圖片描述
    具體操作:
    #define LCD_TOUCH_IC_GT1151QM 注釋掉。這樣觸摸屏才能有效果。
    在這里插入圖片描述
    就可以畫出

    在這里插入圖片描述


二、移植LVGL代碼

1、獲取LVGL官方源碼

點擊此處,進入github 下載源碼
在這里插入圖片描述

此處以8.2.0為例

在這里插入圖片描述

2、整理一下,下載后的源碼文件

a. 我們暫時只需要,這5個文件,復制到新的文件夾中

在這里插入圖片描述
在這里插入圖片描述

b. 為減少內存的消耗,我們再細一點,把需要的文件單拎出來
examples文件夾中的,porting文件夾
demos文件夾中的,keypad_encoder文件夾、 lv_demos.h文件、lv_demos.mk 文件 

在這里插入圖片描述

c.規范化一下,把文件重名,把_template去掉

在這里插入圖片描述
在這里插入圖片描述

3、開始移植

a.在野火觸摸屏歷程中新建一個文件夾,存放lvgl的源碼

在這里插入圖片描述

b.keil工程中,點開魔術棒,勾選C99;然后把Lvgl中的文件夾都加到頭文件路徑中(基本操作)

在這里插入圖片描述

c.點開工程目錄管理器,添加所需的文件夾
LVGL_SRC (用來存放lvgl源碼)
LVGL_POR(用來配置lvgl接口文件)
LVGL_DEMO(用來配置lvgl官方例程)
LVGL_APP(用來存放用戶自己的lvgl代碼)

在這里插入圖片描述

d.對號入座,往各個文件夾里添加所需的文件

在這里插入圖片描述
提示:src文件有點多。。。多到離譜。要一個個文件夾點開,把.c文件都加進來,src中extra文件里面有許多子文件!!!全都要進來

文件夾src 加入到 LVGL_SRC
文件夾porting加入到LVGL_PORT,包括lvgl文件夾中的 lvgl.h lv_conf.h 和 lv_demos.h
文件夾keypad_encoder添加到LVGL_DEMO

三、移植顯示驅動

1、enable LVGL

將 lv_port_disp.c 、 lv_port_disp.h 、 lv_port_indev.c 、 lv_port_indev.h、 lv_conf.h 中的if 0改成 if 1
lv_port_fs.c暫時用不到,先不修改

在這里插入圖片描述

2、修改報錯部分

a.編譯一下,有很多個error,沒事,我們一個個改
(1)我們之前規范化把文件名字修改了,所以把頭文件中的_template都去掉
(2)將…/…/去掉

直接 ctrl+F 全局替換一下

在這里插入圖片描述

3、修改lv_config

我們自己添加 屏幕分辨率。

在這里插入圖片描述

#define MY_DISP_HOR_RES 800
#define MY_DISP_VER_RES 480

在這里插入圖片描述

4、修改lv_port_disp.c文件

在這里插入圖片描述

往下拉修改分辨率,把剛剛定義的宏 替換過去
disp_drv.hor_res = MY_DISP_HOR_RES;
disp_drv.ver_res = MY_DISP_VER_RES;

到此步遇到的問題 Undefined symbol __aeabi_assert (referred from mbrtu.o).

AirPressure\AirPressure.axf: Error: L6218E: Undefined symbol __aeabi_assert (referred from mbrtu.o).

在這里插入圖片描述

解決方法

在這里插入圖片描述


5.顯示測試

a.修改主函數,留下必要的初始化函數

在這里插入圖片描述

b.打開使能demo的宏,在lv_conf里

在這里插入圖片描述

c.配置定時器,在定時器中斷中給lvgl 設置“心跳“ 或者直接用 滴答定時器作為心臟也行

法一

在這里插入圖片描述

法二
配置定時器,在定時器中斷中給lvgl 設置“心跳“

參考這個鏈接!!野火官網的教程

在定時器中斷函數中添加lvgl心跳(#include “lvgl.h”)
/*** @brief  定時器中斷服務函數* @param  無* @retval 無*/void  BASIC_TIM_IRQHandler (void){HAL_TIM_IRQHandler(&TIM_TimeBaseStructure);}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if (htim==(&TIM_TimeBaseStructure)) {lv_tick_inc(1);//lvgl的1ms中斷LED1_TOGGLE;  //紅燈周期閃爍}}

好,上一步結束,繼續配置

d.在主函數中添加lvgl相關頭文件
#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_demo_keypad_encoder.h"
e.在while循環中,調用lvgl事務處理函數
 lv_task_handler(); // lvgl的事務處理
f.在main中添必要函數
lv_init();
lv_port_disp_init();//lvgl顯示接口初始化,放在lvgl_init()的后面
lv_port_indev_init();//lvgl輸入接口初始化,放在lvgl_init()的后面
lv_demo_keypad_encoder();
g.將堆棧改大一點

在這里插入圖片描述

main里最終是這樣的

在這里插入圖片描述

還沒寫完,有問題 排查中。。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214502.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214502.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue路由守衛筆記

路由守衛 當路由切換時,判斷權限 路由守衛類型 1.全局守衛 2.獨享守衛 3.組件內守衛 1.全局守衛 1.前置路由守衛 全局前置路由守衛————初始化的時候被調用、每次路由切換之前被調用 在需要加上路由守衛的路由配置中加上 meta:{isAuth&#xff1…

x的平方根算法(leetcode第69題)

題目描述: 給你一個非負整數 x ,計算并返回 x 的 算術平方根 。由于返回類型是整數,結果只保留 整數部分 ,小數部分將被 舍去 。注意:不允許使用任何內置指數函數和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。…

react中img引入本地圖片的方式

在html文件中,可以直接<img src=./roadBook.png /> 但是在jsx文件中,不支持這種寫法 必須這樣寫 在css樣式中 App.css .img{background: url(./img/roadBook.png) }App.js import ./App.css;<div className=img></div> 1.基于es6Module //導入 import…

【PTA-C語言】實驗五-一維數組

如果代碼存在問題&#xff0c;麻煩大家指正 ~ ~有幫助麻煩點個贊 ~ ~ 實驗五-一維數組 7-1 查找整數&#xff08;分數 15&#xff09;7-2 交換最小值和最大值&#xff08;分數 15&#xff09;7-3 簡化的插入排序&#xff08;分數 15&#xff09;7-4 刪除指定數據&#xff08;分…

node14升級node16之后,webpack3項目無法啟動處理

node從14升級到16之后&#xff0c;項目就無法啟動了&#xff0c;研究了webpack3升級5&#xff0c;研究好幾個小時都無法啟動&#xff0c;最后發現&#xff0c;微微升級幾個版本就可以了。webpack還是3 版本改了好多個的&#xff0c;但是不確定具體是哪幾個起作用的&#xff0c;…

var、let、const 的區別?

var 1、var 聲明的變量在全局內有效 2、可以重復聲明 3、var 聲明的變量存在變量提升 let 1、遇到{}可開啟塊級作用域 2、不能重復聲明--- 可以防止變量重復定義產生的沖突&#xff0c;會直接報錯 3、let 聲明的變量不存在變量提升 const 1、const 聲明…

解讀unity內置的軟陰影處理方式

解讀unity內置的軟陰影處理方式&#xff1a; 參考網址&#xff1a; https://blog.csdn.net/cgy56191948/article/details/105726682 https://blog.csdn.net/weixin_45776473/article/details/119582218 https://tajourney.games/5482/ 上面的博客已經論述了&#xff0c;為何出現…

個人博客搭建保姆級教程-Nginx篇

官方文檔 nginx documentation 說明 nginx是我們本次教程使用的http服務器。它能承受很高的并發&#xff0c;并且安裝簡單&#xff0c;占用內存少。 在服務器篇我們提到了nginx的安裝&#xff0c;在發布篇我們簡述了該怎么放置我們創建的博客html文檔。 在本篇&#xff0c…

css的復合選擇器(有案例)

目錄 復合選擇器的描述 后代選擇器&#xff08;常用重點&#xff09; 子選擇器 并集選擇器&#xff08;重點常用&#xff09; 偽類選擇器 鏈接偽類選擇器 focus 偽類選擇器 知識總結&#xff1a; 案例實現&#xff1a; 復合選擇器的描述 在 CSS 中&#xff0c;可以根…

日志門面slf4j和各日志框架

簡介 簡單日志門面(Simple Logging Facade For Java) SLF4J主要是為了給Java日志訪問提供一套標準、規范的API框架&#xff0c; 其主要意義在于提供接口&#xff0c;具體的實現可以交由其他日志框架&#xff0c;如log4j、logback、log4j2。 對于一般的Java項目而言&#xff…

一個用于處理嵌入式系統中的 NAND Flash 存儲器的工具 `kobs-ng`

一個用于處理嵌入式系統中的 NAND Flash 存儲器的工具 kobs-ng kobs-ng 是一個用于處理嵌入式系統中的 NAND Flash 存儲器的工具。它是 U-Boot&#xff08;開源引導加載程序&#xff09;中的一個子項目&#xff0c;用于擦除、寫入和讀取 NAND Flash 設備上的數據。 以下是 kob…

SpringData JPA 搭建 xml的 配置方式

1.導入版本管理依賴 到父項目里 <dependencyManagement><dependencies><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-bom</artifactId><version>2021.1.10</version><scope>…

【力扣100】238.除自身以外數組的乘積

添加鏈接描述 class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:# 構造第i個數的左右數組n len(nums)left,right,res [1]*n,[1]*n,[1]*nfor i in range(1,n):left[i] nums[i-1]*left[i-1]for i in range(n-2,-1,-1):right[i] nums[i1]*right…

STM32Cube高效開發教程<基礎篇>(十二)----ADC

聲明:本人水平有限,博客可能存在部分錯誤的地方,請廣大讀者諒解并向本人反饋錯誤。 ?? 本專欄博客參考《STM32Cube高效開發教程(基礎篇)》,有意向的讀者可以購買正版書籍輔助學習,本書籍由王維波老師、鄢志丹老師、王釗老師傾力打造,書籍內容干貨滿滿。 一、功能概述 …

【C++11】lambda表達式及包裝器

一.lambda表達式 1.可調用對象 可調用對象即可以像函數一樣被調用的對象&#xff0c;有以下三種&#xff1a; 函數(指針)仿函數對象lambda表達式 tips&#xff1a;調用函數時&#xff0c;既可以用函數名&#xff0c;也可以用函數地址&#xff0c;因為函數名和函數地址是一回事…

Python從入門到精通五:Python數據容器

數據容器入門 為什么學習數據容器 思考一個問題&#xff1a;如果我想要在程序中&#xff0c;記錄5名學生的信息&#xff0c;如姓名。 如何做呢&#xff1f; 學習數據容器&#xff0c;就是為了批量存儲或批量使用多份數據 Python中的數據容器&#xff1a; 一種可以容納多份…

Kalman濾波、擴展Kalman濾波、無跡Kalman濾波和異步濾波的原理及其Matlab代碼

目錄 引言Kalman濾波代碼及其結果展示 擴展Kalman濾波代碼及其結果展示 無跡Kalman濾波無跡變換無跡Kalman濾波代碼及其結果展示 異步無跡Kalman濾波原理代碼及其結果展示 引言 本文給出了Kalman Filter&#xff08;卡爾曼濾波&#xff09;、Extended Kalman Filter&#xff0…

leetcode 98. 驗證二叉搜索樹

leetcode 98. 驗證二叉搜索樹 題目 給你一個二叉樹的根節點 root &#xff0c;判斷其是否是一個有效的二叉搜索樹。 有效 二叉搜索樹定義如下&#xff1a; 節點的左子樹只包含 小于 當前節點的數。 節點的右子樹只包含 大于 當前節點的數。 所有左子樹和右子樹自身必須也是…

vue3 引入 markdown編輯器

參考文檔 安裝依賴 pnpm install mavon-editor // "mavon-editor": "3.0.1",markdown 編輯器 <mavon-editor></mavon-editor>新增文本 <mavon-editor ref"editorRef" v-model"articleModel.text" codeStyle"…

Adams與Abaqus沖突問題

隨著工程仿真軟件的廣泛應用&#xff0c;Adams和Abaqus已成為眾多工程師的首選工具。然而&#xff0c;在使用過程中&#xff0c;一些用戶可能會遇到這兩個軟件之間的沖突問題&#xff0c;導致無法正常進行仿真分析。為了幫助大家解決這一難題&#xff0c;我們推出了一篇關于Ada…