【驱动】ILI9488_stm32F4_LVGL移植

一、屏幕驱动

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

4、在lv_conf.h中配置显示屏的参数

5、在显示的.c文件(lv_port_disp.c)中添加lcd的头文件;并在main.c文件中添加初始化

6、while循环中调用lv_task_handler();                     

### STM32F4ILI9488 显示屏的驱动实现 对于STM32F4微控制器系列而言,要实现对ILI9488显示屏的支持,通常涉及初始化配置、数据传输协议的选择(SPI或并行接口),以及具体的显示控制函数编写。下面提供了一个基本框架来帮助理解如何构建这样的驱动程序。 #### 初始化设置 在开始任何图形绘制之前,必须先完成硬件和软件层面的基础设定工作。这包括但不限于GPIO端口分配给相应的功能引脚;选择合适的通信方式与屏幕建立连接;发送一系列指令使能特定特性如背光亮度调节等[^3]。 ```c void LCD_Init(void){ // GPIO and SPI/I2C configuration here... // Send initialization commands to the display. LCD_WriteCommand(0xB0); /* Power Control 1 */ LCD_WriteData(0x0A); LCD_WriteData(0x02); // More initialization code... } ``` #### 数据写入机制 为了向LCD面板传递图像信息或其他内容,需要定义专门的方法负责处理这些操作。这里展示了一种简化版的数据写入流程: ```c void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos){ LCD_WriteReg(0x2A); // Column Address Set LCD_WriteData(Xpos >> 8); LCD_WriteData(Xpos & 0xFF); LCD_WriteData((Xpos + 159) >> 8); LCD_WriteData((Xpos + 159) & 0xFF); LCD_WriteReg(0x2B); // Page Address Set LCD_WriteData(Ypos >> 8); LCD_WriteData(Ypos & 0xFF); LCD_WriteData((Ypos + 79) >> 8); LCD_WriteData((Ypos + 79) & 0xFF); LCD_WriteReg(0x2C); // Memory Write } void LCD_DrawPixel(int16_t x, int16_t y, uint16_t color){ if(x >= 0 && x < 240 && y >= 0 && y < 320){ LCD_SetCursor(x,y); LCD_WriteData(color>>8); LCD_WriteData(color&0xff); } } ``` 上述代码片段展示了怎样定位到指定位置准备绘图,并且给出了画单个像素点的例子。实际应用中可能还需要考虑更多细节比如颜色模式转换等问题。 #### 获取示例项目 针对想要快速上手的朋友来说,可以直接利用已有的开源资源作为起点。例如,在GitCode平台上有这样一个仓库专门为STM32设计了完整的ILI9488驱动方案。访问链接后可以找到详细的文档描述加上配套源码文件,非常适合用来学习研究或者直接移植至个人工程项目当中去。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值