设备
用的是优信电子的现成1.28寸GC9A01-TFT屏幕(圆的)驱动 驱动板子是正点的mini精英板
优信原文链接:1.28寸 驱动:优信驱动 我的MDK工程(包含lvgl v8.2):keil工程
注意事项
以下开始是我移植时发现的问题,希望能帮助到想自己移植的朋友
一:lvgl中需要配置打点函数,正点的LVGL教程中传入lv_port_disp_template.c中static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) 所调用的函数是一个颜色块打印函数,我找了很久没找到GC9A01的颜色块打印函数,只有单个颜色,于是自己结合正点的屏幕驱动和优信的单颜色打印函数改写了一个颜色块打印函数
/*********************************************************
函数说明:在指定区域填充颜色
形参:xsta,ysta x、y起始坐标
xend,yend x、y结束坐标
color 要填充颜色的数组首地址
**********************************************************/
void LCD_color_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,uint16_t *color)
{
uint16_t height, width;
uint16_t i, j;
width = xend - xsta + 1; /* 得到填充的宽度 */
height = yend - ysta + 1; /* 高度 */
LCD_Address_Set(xsta,ysta,xend,yend);//设置显示范围
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
LCD_WR_DATA(color[i * width + j]);
}
}
}
把它放在lcd.c里面就行,记得定义在lcd.h里面
二:因为我用的是HAL库,所以我在把标准库的驱动改成HAL库的时候u8和uint8_t之类的定义有点不懂,略显笨拙,有能力的可以自己封装一下,在lcd_init.h中
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
三:自己写的lvgl的显示代码可以自己建一个文件夹,我这里懒,测试代码直接放main里面了
四:这种情况是堆空间溢出的问题
在lv_conf.h中修改
#define LV_MEM_SIZE (35U * 1024U) /*[bytes]*/
对于mini精英板子来说,写48*1024是会报错的,需要改小一点
五:改成HAL库很简单但是记得lcd_init.h改成HAL库时,记得包含hal库的头文件,否则GPIO配置报错
#include "./SYSTEM/sys/sys.h"
#include "./STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h"
六:接口说明在优信驱动文件中有,lvd_init.h中是引脚配置
//-----------------LCD端口配置----------------
#define LCD_SCLK_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET)//SCL=SCLK
#define LCD_SCLK_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET)
#define LCD_MOSI_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET)//SDA=MOSI
#define LCD_MOSI_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET)
#define LCD_RES_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET)//RES
#define LCD_RES_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET)
#define LCD_DC_Clr() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET)//DC
#define LCD_DC_Set() HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET)
#define LCD_CS_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET)//CS
#define LCD_CS_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET)
#define LCD_BLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET)//BLK
#define LCD_BLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET)
可以了