LCD¶
FAQ1 怎么添加一份自己的屏模组(LCD + TP)¶
在
SDK\customer\peripherals路径下复制一份lcd驱动修改复制的驱动文件与
SConscript,适配寄存器,数据接口,CLK速率,RGB格式修改
SDK\customer\peripherals\Kconfig添加新驱动宏修改
SDK\customer\boards\Kconfig_lcd添加新屏模组配置确认
bsp_pinmux.c和bsp_lcd_tp.c的引脚配置确认
menuconfig -> Built-in LCD module driver选择你添加的驱动
请参见屏幕模组调试
FAQ2 上电屏幕是黑的如何排查¶
关键引脚检测
VCC:主供电
背光引脚:背光供电
LCD_RST:复位引脚 排查方法:
检查
bsp_pinmux.c和bsp_lcd_tp.c的引脚配置使用finsh命令检查软件配置的引脚状态:
pin status 1 # 检查PA01脚 异常状态: PIN 1, FUNC=15, VAL=0, ANA_IN, GPIO_MODE_INPUT 正常状态: PIN 1, FUNC=0, VAL=1, DIG_IO, GPIO_MODE_OUTPUT
关键差异:
FUNC=0(GPIO模式)VAL=1(输出高电平)DIG_IO(数字IO模式)GPIO_MODE_OUTPUT(输出模式)
逻辑分析仪抓具体上电波形分析上电时序
FAQ3 LCD调试常见问题¶
LCD屏幕右侧绿条纹
LCD显示花屏
TFT屏开机或唤醒时第一帧花屏
初始化读写都正常但不亮屏问题
如何从Framebuffer 导出来看图像是否正常?
LCD驱动中常见的Assert死机
打静电ESD时LCD花屏和定屏问题
开关机动画或者充电图像显示扭曲问题
屏QSPI读不到屏ID的问题
屏QSPI动态调整读写寄存器CLK速率
请参见LCD常见问题
FAQ4 如何导出送屏buf中的数据并恢复成图像¶
从
hcpu.map文件中查询送屏缓冲区的地址,对应为buf2_1;若项目配置双缓冲区,同步查询buf2_2。
从 dump 文件中拷贝 buf2_1/buf2_2 对应的二进制文件(psram.bin 或 hcpu_ram.bin),dump 导出方法参见 死机分析
将拷贝的 bin 文件放入 sdk/tools/bin2bmp 目录,参照该目录下 readme 文档内的指令,执行生成图像即可
FAQ5 如何排查屏显画面倾斜扭曲问题¶
如上图,该现象为像素对齐异常导致,需参考对应 LCD 硬件规格书,确认标准的像素对齐要求
根据规格书要求,核对 LCD 注册接口中 pixel_align 对齐参数配置是否符合要求
LCD_DRIVER_EXPORT(name, id, init_cfg, dev_ops, ic_max_hor_res, ic_max_ver_res, pixel_align)
FAQ6 如何配置合适的TE周期¶
TE 周期的配置标准、计算方法及适配规则,参见:帧率/ LCD TE 周期
FAQ7 如何配置屏显画面旋转角度(90°/180°/270°)¶
1. 芯片原生支持能力¶
56x、58x 系列 LCDC 控制器:支持垂直镜像、水平镜像;
52x 系列 LCDC 控制器:仅支持垂直镜像。
2. 配置方法¶
优先确认 LCD 硬件是否原生支持镜像,若支持则直接基于对应芯片系列配置,控制指令如下:
rt_device_control(lcd_device, RTGRAPHIC_CTRL_ROTATE_180, NULL)
⚠️注意:旋转 180° 等价于 水平镜像+垂直镜像
若 LCD 不支持旋转,或芯片镜像方案无法满足需求,可通过 GPU 实现送屏缓冲区旋转,调用以下接口设置旋转角度即可:
/**
* @brief 设置屏显画面旋转角度
* @param rotate: 旋转角度枚举值,支持90°/180°/270°旋转配置
* @return rt_err_t: 配置成功返回RT_EOK,失败返回对应错误码
*/
rt_err_t drv_epic_set_rotation(drv_epic_rotate_t rotate)
⚠️注意:该方案会占用 GPU 资源,可能导致图像渲染耗时增加,当前仅支持 90°、180°、270° 固定角度旋转。
FAQ8 如何计算理论帧率¶
详细的理论帧率推导公式、计算示例、性能评估标准,参见:帧率/LCD送数。
FAQ9 如何在应用层设置不休眠¶
可在应用层直接调用以下接口实现屏幕不休眠功能,接口调用简单无依赖:
/**
* @brief 应用层屏幕休眠锁使能/关闭 (设置不休眠/恢复休眠)
* @param enable false:禁止休眠(屏幕常亮) true:恢复自动休眠
*/
void app_screen_lock_enable(bool enable);
FAQ10 如何重置休眠时间¶
当需要刷新屏幕休眠计时(比如触摸操作、按键响应、数据更新时),调用以下接口重置休眠时间,重新开始倒计时:
/**
* @brief 手动触发显示屏的活跃状态 (刷新屏幕休眠计时/重置休眠倒计时)
* @param disp 显示屏设备句柄指针,传 NULL 则使用默认显示屏
*/
void lv_disp_trig_activity(lv_disp_t * disp)