在线时间25 小时
UID3370139
注册时间2024-2-29
NXP金币0
TA的每日心情 | 奋斗 2024-4-30 22:42 |
---|
签到天数: 9 天 连续签到: 1 天 [LV.3]偶尔看看II
中级会员
 
- 积分
- 250
- 最后登录
- 2024-6-15
|
本帖最后由 dirty123 于 2024-4-30 22:39 编辑
本篇讲述MCX-N947-BRK开发板LVGL移植。
一.硬件准备
使用ST7735S驱动IC的LCD屏,官方有现成的ST7796S驱动显示屏的demo,这里作为参考,适配自己手头的屏。
图1:ST7735S LCD原理接口
图2:开发板LCD接口
硬件连接如下:
LCD模块 开发板 功能
SCL P4_1 SPI的时钟线
SDA P4_0 SPI的数据线
RES P4_7 LCD复位
DC P0_7 LCD数据/命令选择引脚
CS P0_12 LCD显示屏片选信号,低电平有效
BLK P0_13 背光控制开关
图3:开发板与LCD连接
二.代码准备
1.打开mcxn9xxevk_lvgl_guider工程,在lcdc文件加下移植添加fsl_st7735s.c,fsl_st7735s.h源文件
图4:工程添加
2.在fsl_st7735s.c里的配置寄存器
- static const uint8_t s_st7735s_driver_preset_pars035[] = {
- // /* clang-format off */
- // 0x01, ST7735S_CMD_CSCON, 0xC3, // Enable command part 1
- // 0x01, ST7735S_CMD_CSCON, 0x96, // Enable command part 2
- // 0x01, ST7735S_CMD_INVTR, 0x01, // Display inversion
- // 0x02, ST7735S_CMD_FRMCTR1, 0x80, 0x10, // Frame rate control 1
- // 0x04, ST7735S_CMD_BPC, 0x1F, 0x50, 0x00, 0x20, // Blanking porch control
- // 0x03, ST7735S_CMD_DFC, 0x8A, 0x07, 0x3B, // Display function control
- // 0x02, ST7735S_CMD_PWR1, 0x80, 0x64, // Power control 1
- // 0x01, ST7735S_CMD_PWR2, 0x13, // Power control 2
- // 0x01, ST7735S_CMD_PWR3, 0xA7, // Power control 3
- // 0x01, ST7735S_CMD_VCMPCTL, 0x09, // VCOM control
- // 0x08, ST7735S_CMD_DOCA, 0x40, 0x8A, 0x00, 0x00, 0x29, 0x19, 0xA5, 0x33, // DOCA
- // 0x0E, ST7735S_CMD_PGC, 0xF0, 0x06, 0x0B, 0x07, 0x06, 0x05, 0x2E, 0x33, 0x47, 0x3A, 0x17, 0x16, 0x2E, 0x31, // PGC
- // 0x0E, ST7735S_CMD_NGC, 0xF0, 0x09, 0x0D, 0x09, 0x08, 0x23, 0x2E, 0x33, 0x46, 0x38, 0x13, 0x13, 0x2C, 0x32, // NGC
- // 0x01, ST7735S_CMD_CSCON, 0x3C, // Disable command part 1
- // 0x01, ST7735S_CMD_CSCON, 0x69, // Disable command part 2
- // /* clang-format on */
- #if 0
- 0x03, ST7735S_CMD_FRMCTR1, 0x00,0x08,0x05,//0x01,0x2C,0x2D,
- 0x03, ST7735S_CMD_FRMCTR2, 0x05,0x3A,0x3A,//0x01,0x2C,0x2D,
- 0x06, ST7735S_CMD_FRMCTR3, 0x05,0x3A,0x3A,0x05,0x3A,0x3A,//0x01,0x2C,0x2D,0x01,0x2C,0x2D,
- 0x01, ST7735S_CMD_FRMCTR4, 0x03,//0x07,
- 0x03, ST7735S_CMD_PWR1, 0x62,0x02,0x04,//0xA2,0x02,0x84,0xC1,
- 0x01, ST7735S_CMD_PWR2, 0xC0,//0xC5,
- 0x02, ST7735S_CMD_PWR3, 0xD0,0x00,//0x0A,0x00,
- 0x02, ST7735S_CMD_PWR4, 0x8D,0x6A,//0x8A,0x2A,
- 0x02, ST7735S_CMD_PWR5, 0x8D,0xEE,//0x8A,0xEE,
- 0x01, ST7735S_CMD_VCMPCTL, 0x08,//0x0E,
- 0x01, ST7735S_CMD_MADCTL, 0xC8, //竖屏--0xC8,横屏--0xA8,竖屏翻转180度--0x08,横屏翻转180度--0x68
- 0x10, ST7735S_CMD_PGC, 0x03,0x1B,0x12,0x11,0x3F,0x3A,0x32,0x34,0x2F,0x2B,0x30,0x3A,0x00,0x01,0x02,0x05,//0x0F,0x1A,0x0F,0x18,0x2F,0x28,0x20,0x22,0x1F,0x1B,0x23,0x37,0x00,0x07,0x02,0x10,
- 0x10, ST7735S_CMD_NGC, 0x03,0x1B,0x12,0x11,0x32,0x2F,0x2A,0x2F,0x2E,0x2C,0x35,0x3F,0x00,0x00,0x01,0x05,//0x0F,0x1B,0x0F,0x17,0x33,0x2C,0x29,0x2E,0x30,0x30,0x39,0x3F,0x00,0x07,0x03,0x10,
- // 0x01, ST7735S_CMD_CSCON, 0x01,
- // 0x01, ST7735S_CMD_LP, 0x00,
- 0x01, ST7735S_CMD_COLMOD, 0x05, //65K mode
- #else
- 0x03,0xB1,0x00,0x08,0x05,
- 0x03,0xB2,0x05,0x3A,0x3A,
- 0x06,0xB3,0x05,0x3A,0x3A,0x05,0x3A,0x3A,
- 0x01,0xB4,0x03,
- 0x03,0xC0,0x62,0x02,0x04,
- 0x01,0xC1,0xc0,
- 0x02,0xC2,0x0D,0x00,
- 0x02,0xC3,0x8D,0x6A,
- 0x02,0xC4,0x8D,0xEE,
- 0x01,0xC5,0x08,
- 0x10,0xE0,0x03,0x1B,0x12,0x11,0x3F,0x3A,0x32,0x34,0x2F,0x2B,0x30,0x3A,0x00,0x01,0x02,0x05,
- 0x10,0xE1,0x03,0x1B,0x12,0x11,0x32,0x2F,0x2A,0x2F,0x2E,0x2C,0x35,0x3F,0x00,0x00,0x01,0x05,
- 0x01,0x3A,0x05,
- #endif
- };
复制代码 2.在board\lvgl_support.h修改屏的参数及相关宏
- #ifndef BOARD_LCD_S035
- #define BOARD_LCD_S035 1//0
- #endif
- #if BOARD_LCD_S035
- #define LCD_WIDTH 165//480
- #define LCD_HEIGHT 128//320
- #else
- #define LCD_WIDTH 800
- #define LCD_HEIGHT 480
- #endif
复制代码 3.对LVGL代码了解
(1)在main函数 BOARD_I2C_ReleaseBus();对I2C初始化。BOARD_InitBootPins(void)对开发板及LCD引脚初始化。
(2)在[size=13.3333px]source\lvgl_guider.c,board\lvgl_support.h宏定义了引脚
- //source\lvgl_guider.c
- #define I2C_RELEASE_SDA_PORT PORT4
- #define I2C_RELEASE_SCL_PORT PORT4
- #define I2C_RELEASE_SDA_GPIO GPIO4
- #define I2C_RELEASE_SDA_PIN 0U
- #define I2C_RELEASE_SCL_GPIO GPIO4
- #define I2C_RELEASE_SCL_PIN 1U
- #define I2C_RELEASE_BUS_COUNT 100U
复制代码
- //board\lvgl_support.h
- /* LCD panel. */
- #define BOARD_LCD_RST_GPIO GPIO4
- #define BOARD_LCD_RST_PIN 7
- #define BOARD_LCD_TE_GPIO GPIO0
- #define BOARD_LCD_TE_PIN 13
- #define BOARD_LCD_CS_GPIO GPIO0
- #define BOARD_LCD_CS_PIN 12
- #define BOARD_LCD_RS_GPIO GPIO0
- #define BOARD_LCD_RS_PIN 7
- #define BOARD_LCD_INT_PORT PORT4
- #define BOARD_LCD_INT_GPIO GPIO4
- #define BOARD_LCD_INT_PIN 6
复制代码 (3)Deno_FlushDisplay刷新函数是一个很重要函数,为设定区域与现实颜色。
(4)lvgl任务AppTask
- static void AppTask(void *param)
- {
- #if LV_USE_LOG
- lv_log_register_print_cb(print_cb);
- #endif
- lv_port_pre_init();
- lv_init();
- lv_port_disp_init();
- lv_port_indev_init();
- s_lvgl_initialized = true;
- PRINTF("To Run User UI ...\r\n");
- setup_ui(&guider_ui);
- events_init(&guider_ui);
- custom_init(&guider_ui);
- for (;;)
- {
- lv_task_handler();
- vTaskDelay(5);
- }
- }
复制代码
lv_port_pre_init();lv_init();lv_port_disp_init();/*这三个是LCD显示初始化,包含申请RAM空间,屏横竖像素配置等*/
lv_port_indev_init();//这个是关于触摸的
setup_ui(&guider_ui);//设置UI界面
lv_task_handler(); // LVGL时钟节拍更新
至此,LVGL移植框架基本完成了。但自己烧录测验时屏没有正确显示,花了比较长时间对着寄存器配置找也没发现问题点。文末附上这工程代码和屏驱动参照。有经验的小伙伴可以一起交流下,后续有时间这块再研究下。
|
|