STM32+HAL库+FreeRTOS移植LVGL(8.3)驱动SPI协议的LCD触摸屏—从点亮到提速之点亮篇
本章将系统讲解LVGL在嵌入式平台的完整开发流程,分为三大实战阶段:首先完成LVGL基础移植,接着通过DMA加速与源码级优化提升性能,最终结合GUI-Guider进行高效UI设计。我们将以踩坑日记的形式,深入剖析移植过程中的典型问题及解决方案。首篇聚焦LVGL移植环节,详细演示从零搭建图形框架的关键步骤。如果你已成功点亮lcd屏,实现触摸功能,可直接进入下一章移植篇。
前言
本章将系统讲解LVGL在嵌入式平台的完整开发流程,分为三大实战阶段:首先完成LVGL基础移植,接着通过DMA加速与源码级优化提升性能,最终结合GUI-Guider进行高效UI设计。我们将以踩坑日记的形式,深入剖析移植过程中的典型问题及解决方案。首篇聚焦LVGL移植环节,详细演示从零搭建图形框架的关键步骤。
如果你已成功点亮lcd屏,实现触摸功能,可直接进入下一章移植篇。
一、点亮准备
硬件:
笔者使用的主控是STM32F407VET6(立创的天空星),STM32F103系列也一样适配。LCD使用是ILI9431的2.8寸触摸屏(触摸芯片为MSP2807)。


软件:
1、stm32使用keil5配合cubemx进行开发。LCD屏幕需要找商家提供资料(可能只有标准库)。所以在后面也会提供本人修改过后的代码给大家参考。
GPIO: IPS_为屏幕所需引脚,T_为触摸屏所需引脚(没有触摸功能可以不配置)。

时钟配置:

系统配置:

定时器:

SPI:由于自己板子画的时候给屏幕使用的是SPI2,但是使用SPI1速度可以更快。

FreeRTOS:

时钟树:

堆栈配置:可以把堆栈改大一点,否则可能导致无法运行。


至此cubemx配置完成,接下来导入lcd文件,如果使用触摸功能还需要添加触摸文件和延时文件。

修改屏幕尺寸

以自己的cubemx为准进行接线后在main中调用LCD_Init(),确保lcd正常点亮后即可开始lvgl的移植(若使用我提供的LCD库,可以配置引脚的宏定义名称跟我一致,即可直接使用。使用spi1的话需要自己修改spi句柄)。

若使用触摸屏还需要us级delay,由于hal库没有自带us级delay,所以我使用了正点原子的delay库。因此需要添加delay.c并在main中添加delay_init对delay进行初始化。之后可以调用TP_Adjust()对屏幕进行矫正(厂家给的例程是将矫正后的数据存入外部EEPROM。其实如果没有也可以存入内部flash,感兴趣可以自行百度。我使用了更加方便的方法,矫正后直接把数据写入代码中的结构体里了)。
在 freertos 中的 lv_task 中添加LCD初始化函数和触摸矫正函数。

在main中添加重定向标准输出

开始测试

然后打开串口助手查看矫正信息,把信息填入代码的结构体中。


之后调用TP_Test();即可测试触摸功能。


至此点亮篇也就结束了,下一篇文章将开始lvgl的移植。
更多推荐



所有评论(0)