一、屏幕驱动
1、工程配置(STM32CubeIDE)
2、添加驱动程序(lcd.c lcd.h)
初始化代码
void LCD_Init(void)
{
//ILI9488
HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET);
HAL_Delay(120);
HAL_GPIO_WritePin(LCD_RES_GPIO_Port, LCD_RES_Pin, GPIO_PIN_SET);
HAL_Delay(20);
HAL_GPIO_WritePin(LCD_RES_GPIO_Port, LCD_RES_Pin, GPIO_PIN_RESET);
HAL_Delay(20);
HAL_GPIO_WritePin(LCD_RES_GPIO_Port, LCD_RES_Pin, GPIO_PIN_SET);
HAL_Delay(120);
HAL_Delay(50); // delay 50 ms
LCD_WR_REG(0XFF);
LCD_WR_REG(0XF7);
LCD_WR_DATA(0xA9);
LCD_WR_DATA(0x51);
LCD_WR_DATA(0x2C);
LCD_WR_DATA(0x82);
LCD_WR_REG(0xC0);
LCD_WR_DATA(0x11);
LCD_WR_DATA(0x09);
LCD_WR_REG(0xC1);
LCD_WR_DATA(0x41);
LCD_WR_REG(0XC5);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x80);
LCD_WR_REG(0xB1);
LCD_WR_DATA(0xB0);
LCD_WR_DATA(0x11);
LCD_WR_REG(0xB4);
LCD_WR_DATA(0x02);
LCD_WR_REG(0xB6);
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x22);
LCD_WR_REG(0xB7);
LCD_WR_DATA(0xc6);
LCD_WR_REG(0xBE);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x04);
LCD_WR_REG(0xE9);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x36);//36寄存器
LCD_WR_DATA(0x60);
//LCD_WR_DATA(0x08);
LCD_WR_REG(0x3A);
LCD_WR_DATA(0x55);
LCD_WR_REG(0xE0);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x07);
LCD_WR_DATA(0x10);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x17);
LCD_WR_DATA(0x0B);
LCD_WR_DATA(0x41);
LCD_WR_DATA(0x89);
LCD_WR_DATA(0x4B);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x0C);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x18);
LCD_WR_DATA(0x1B);
LCD_WR_DATA(0x0F);
LCD_WR_REG(0XE1);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x17);
LCD_WR_DATA(0x1A);
LCD_WR_DATA(0x04);
LCD_WR_DATA(0x0E);
LCD_WR_DATA(0x06);
LCD_WR_DATA(0x2F);
LCD_WR_DATA(0x45);
LCD_WR_DATA(0x43);
LCD_WR_DATA(0x02);
LCD_WR_DATA(0x0A);
LCD_WR_DATA(0x09);
LCD_WR_DATA(0x32);
LCD_WR_DATA(0x36);
LCD_WR_DATA(0x0F);
LCD_WR_REG(0x11);
HAL_Delay(120);
LCD_WR_REG(0x29);
}
若屏幕显示不完全可以查看是否为刷屏方向的问题。
lcd.h文件
注意寄存器地址
#define Lcd_Cmd_Reg *((__IO uint16_t *)((uint32_t)0x60000000))
#define Lcd_Data_Reg *((__IO uint16_t *)((uint32_t)0x60020000))
#ifndef __LCD_H
#define __LCD_H
#include "sys.h"
#include "stdlib.h"
//#define LV_HOR_RES_MAX 480
//#define LV_VER_RES_MAX 320
#define Lcd_Cmd_Reg *((__IO uint16_t *)((uint32_t)0x60000000))
#define Lcd_Data_Reg *((__IO uint16_t *)((uint32_t)0x60020000))
void LCD_Init(void);
void LCD_FillRect(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t *color);
void LCD_SetWindows(u16 xStar, u16 yStar, u16 xEnd, u16 yEnd);
#endif
若刷新速度慢注意要修改时钟频率(跟板子上的晶振相匹配)
3、在主函数中添加头文件和文件路径
若编译时出现找不到头文件的错误,可能是工程没有配置源文件路径(具体操作如下)
二、LVGL移植
1、在lvgl的工程路径下复制
lvgl_src
lvgl->examples->porting
custom
generated
2、到IDE创建的工程目录下,添加路径
3、去掉lvgl->examples->porting中的文件名后半部分
(eg:lv_port_disp_template.c------------------->>>>>>>>>>>>>>>>>>lv_port_disp.c)
并将其文件夹下所有文件开头部分的if 0 改为if 1