基于stm32F103ZET6霸道野火+ST7789LCD+xpt2046TP移植LVGL8.2.0
这里感谢两个博主,我是参考他们的博客才完成了我这次lvgl的移植,这是我找了n个后对我帮助最关键的,没有这两个博主我的此次移植很可能破产,鸣谢。
李法师
https://blog.csdn.net/maomaochong666/article/details/124896592?spm=1001.2014.3001.5502
wenzi
https://blog.csdn.net/weixin_42616791/article/details/109509883?spm=1001.2014.3001.5502
一、环境搭建
1、我是基于gcc环境+makefile项目做的,这个环境搭建参考我上一篇文章<<如何用gcc+makefile改造STM32Keil项目>>
2、下载LVGL源码,下载地址:https://github.com/lvgl/lvgl
国内访问不太友好可能会比较慢,有梯子可以挂梯子没有梯子找一个镜像网址(百度github镜像就行了)
进入后直接下载的是最新的版本,我用的是lvgl8.2.0,点击master切换到8.2然后再下载就行
二、将lvgl工程放入自己项目工程中,并修改makefile编译成功
1、为了省事我直接将整个文件夹copy到了项目中,由于我是用的gcc+makefile所以就相对比较省事,不需要像keil那种把每个文件拖进去,直接修改makefile文件就行
2、修改makefile编译lvgl,由于我这里把所有的都文件都包含了,所以导致编译会有点慢,其实真正需要的就是lvgl/src和lvgl_driver文件的文件,这个网上到处都是,后续我这边也会持续优化,当前只是移植展示
第一步:设置LVGL的目录位置,是基于makefile当前目录,然后设置LVGL目录名,方便后面使用,最后用include导入lvgl目录下的lvgl.mk文件
注意:这里导入的.mk里面其实还会继续导入其它文件夹的.mk,举其中一个lv_core.mk说明,这里是将对应文件夹中的所有*.c文件赋值到CSRCS,然后我们在makefile中奖CSRCS添加到编译中就可以编译所有的.c文件 ,可以用
第三步:修改代码
1、修改lv_conf.h文件,把开头的#if 0修改成if 1,然后将颜色深度改成16使用RGB565,这里的堆内存我使用的是20,具体根据自己的mcu性能
2、移植porting接口层代码,这是非常重要的部分,能否成功显示主要靠这里了,它包含了显示,文件,输入设备的驱动移植
这里文件用不到所有lv_port_fs里面的就不动了
lv_port_disp.c文件:
将#if 0改成#if 1,然后将屏幕的宽高修改成自己屏幕的宽高
修改
修改disp_flush函数,添加颜色绘制代码,这行代码一般是屏幕自带的驱动代码,我这里用的是野火的st7789,基于原来的基础上简单修改了一下(虽然名字叫9341但是内部初始化会根据ID选择初始化对应的屏幕)
可以将屏幕初始化放在这里,我是放在main里面了原因是...
修改lv_port_indev.c ,同样将#if 0改成#if 1
然后由于我用的是TP触摸方式,所以只需要把TP的打开,其它的通通注释
修改touchpad_read函数,这里的XPT2046_TouchDetect,XPT2046_Get_TouchedPoint函数都是野火屏幕驱动中的代码不需要修改,其中需要将XPT2046_TouchDetect,在.h中声明出来其它的不用动
对了,lv_port_indev.h和lv_port_disp.h文件中的#if 0 别忘改成#if 1
三、在main函数中初始化并使用tim定时器给lvgl一个基本时钟,这里的lcd初始化,TP初始化以及TIM初始化在野火的模块代码中都有我就不写了,因为里面是一模一样的
最后运行效果如下,点击Toggle会变颜色
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?