ST7789V笔记--颜色反显

发布时间:2026/8/1 14:34:00

ST7789V笔记--颜色反显
/** * Bsp_Lcd_ControllerInit — ST7789V 控制器寄存器初始化 ** * 初始化序列来源: ST7789V 数据手册 V1.3, 第 9 章 Application * * 目标面板: KD024C-4 (240×320 常黑 IPS) * 接口方式: SMC 16 位 8080 并行, RGB565 像素格式 * * 流程: * 1. Sleep Out (0x11) → 退出休眠, 启动内部 DC/DC 电源 * 2. MADCTL (0x36) → 扫描方向 BGR 模式 (匹配 emWin BGR 输出) * 3. Frame Rate (0xB2) → 前后廊时序 * 4. Gate Control (0xB7) → VGH/VGL 栅极驱动电压 * 5. VCOM (0xBB) → VCOM 偏置电压, 消除 Flicker * 6. Power Control → 电源管理 (0xC0/C2/C3/C4/C6/D0) * 7. Gamma Curve → 正/负极性 Gamma 校正 (0xE0/0xE1, 14 字节) * 8. COLMOD (0x3A) → 16-bit/pixel RGB565 * 9. CASET/RASET (0x2A/2B) → 默认列/行窗口范围 (0~239 / 0~319) * 10. INVON (0x21) → 【已禁用】KD024C-4 为常黑面板, 无需 INVON 反色 * 11. Display ON (0x29) → 开启显示, GRAM 内容输出到面板 * * 颜色通道对齐策略 (重要): * - emWin 上层配置为 BGR565 格式 → R/B 已在软件层交换 * - MADCTL BGR bit 1 (0x08) → 硬件按 BGR 顺序解读 16-bit 数据 * - 结果: emWin 的 GUI_RED → 驱动收到 0x001F → 硬件 BGR 解读 → RED * - 所有像素写入路径 (Fill/ShowString/FullColor) 无需再做软件层 RGBtoBGR * * 注意: CASET/RASET/RAMWR (0x2A/0x2B/0x2C) 与 ILI9341 相同, * Bsp_Lcd_SetWindow 无需修改。 **/ static void Bsp_Lcd_ControllerInit(void) { #if 1 /* * 1. Sleep Out (0x11) * 退出休眠模式, 启动内部 DC/DC 升压和振荡器。 * 需等待 ≥ 120ms (见 Bsp_Lcd_HwReset 末尾延时)。 * */ LCD_WRITE_CMD(0x11); /* Sleep Out */ /* * 2. MADCTL — Memory Data Access Control (0x36) * * 0x08 0b0000_1000 * Bit[7] MY 0: 行地址从上到下 * Bit[6] MX 0: 列地址从左到右 * Bit[5] MV 0: 行列不交换 (竖屏 240×320) * Bit[4] ML 0: 垂直刷新从上到下 * Bit[3] BGR 1: 数据顺序为 BGR (匹配 emWin 驱动层颜色格式) * Bit[2] MH 0: 水平刷新从左到右 * Bit[1:0] 0: 保留 * * 颜色说明: emWin 内部配置为 BGR565 格式, GUI_RED 经 emWin * 转换后传入驱动层的 RGB565 值为 0x001F。ST7789V 的 BGR bit1 * 告知硬件输入数据是 BGR 顺序, 0x001F 被解读为: B0, G0, R31 → RED。 * 若 BGR0 (RGB 模式), 0x001F 会被硬件解读为 R0, G0, B31 → BLUE。 * */ LCD_WRITE_CMD(0x36); LCD_WRITE_DAT(0x08); /* MY0 MX0 MV0 ML0 BGR1 MH0 */ /* * 3. PORCTRL — Porch Setting (0xB2) * 配置 TFT 驱动时序中的前廊/后廊参数, * 确保 240×320 分辨率帧同步正确。 * * P[7:0] 0x0C (后廊行数 12) * P[15:8] 0x0C (前廊行数 12) * P[19:16] 0x0 (后廊像素数 0) * P[27:20] 0x33 (前廊像素数 51) * P[31:28] 0x3 (前廊像素高 nibble 3) * */ LCD_WRITE_CMD(0xB2); LCD_WRITE_DAT(0x0C); LCD_WRITE_DAT(0x0C); LCD_WRITE_DAT(0x00); LCD_WRITE_DAT(0x33); LCD_WRITE_DAT(0x33); /* * 4. GCTRL — Gate Control (0xB7) * 设置栅极驱动电压 VGH 和 VGL。 * VGH[5:0] 0x15 21 → ≈ 13.26V (TFT 导通) * VGL[2:0] 0x05 5 → ≈ -10.43V (TFT 截止) * */ LCD_WRITE_CMD(0xB7); LCD_WRITE_DAT(0x35); /* VGH21, VGL5 */ /* * 5. VCOMS — VCOM Setting (0xBB) * VCOM 偏置电压, 消除列反转时的 Flicker 闪烁。 * VCOM[6:0] 0x35 53 → VCOM ≈ 0.725V * */ LCD_WRITE_CMD(0xBB); LCD_WRITE_DAT(0x35); /* VCOM 53 → ~0.725V */ /* * 6. LCMCTRL — LCM Control (0xC0) * 内部偏置与升压模式控制。 * XMY[1:0] 00 (列反转) * XBGR 1 (增强显示质量) * 最终值 0x2C * */ LCD_WRITE_CMD(0xC0); LCD_WRITE_DAT(0x2C); /* * 7. VDVVRHEN — VDV and VRH Command Enable (0xC2) * CMDSEL 1 → 允许后续写入 VRHS/VDVS 寄存器。 * */ LCD_WRITE_CMD(0xC2); LCD_WRITE_DAT(0x01); /* 使能 VDV/VRH 命令 */ /* * 8. VRHS — VRH Set (0xC3) * VAP[5:0] 0x12 (GRAMP 高电平参考电压) * VAP 越高 → 画面越亮。当前值 0x12 平衡亮度和功耗。 * */ LCD_WRITE_CMD(0xC3); LCD_WRITE_DAT(0x12); /* VRH 0x12 */ /* * 9. VDVS — VDV Set (0xC4) * VDV[5:0] 0x20 (VDV 电压, 影响 Gamma 基准) * */ LCD_WRITE_CMD(0xC4); LCD_WRITE_DAT(0x20); /* VDV 0x20 */ /* * 10. FRCTRL2 — Frame Rate Control (0xC6) * NLA[4:0] 0x0F 15 * 帧率 fosc / ((RTNA×240) × (NLA1LINE)) * 在 240×320 分辨率下 ≈ 60Hz * */ LCD_WRITE_CMD(0xC6); LCD_WRITE_DAT(0x0F); /* NLA 15, 帧率 ~60Hz */ /* * 11. PWCTRL1 — Power Control 1 (0xD0) * AVDD_CLP 0xA4 (AVDD 电压钳位) * AVCL_CLP 0xA2 (AVCL 电压钳位) * 控制内部升压电路的整体电源参数。 * */ LCD_WRITE_CMD(0xD0); LCD_WRITE_DAT(0xA4); /* AVDD 钳位 */ LCD_WRITE_DAT(0xA2); /* AVCL 钳位 */ /* * 12. PVGAMCTRL — Positive Gamma Curve (0xE0) * 14 字节正极性 Gamma 校正曲线 (VP63~VP0)。 * 精细调节灰阶过渡, 优化高亮度区域色彩还原。 * * 数据表参考值 (V1.3 §9.2), 轻微调整以适配 * KD024C-4 常黑 IPS 面板的偏色特性。 * */ LCD_WRITE_CMD(0xE0); LCD_WRITE_DAT(0xD0); /* VP63 */ LCD_WRITE_DAT(0x00); /* VP62 */ LCD_WRITE_DAT(0x02); /* VP61 */ LCD_WRITE_DAT(0x07); /* VP59 */ LCD_WRITE_DAT(0x0A); /* VP57 */ LCD_WRITE_DAT(0x28); /* VP50 */ LCD_WRITE_DAT(0x32); /* VP43 */ LCD_WRITE_DAT(0x44); /* VP36 */ LCD_WRITE_DAT(0x42); /* VP29 */ LCD_WRITE_DAT(0x06); /* VP23 */ LCD_WRITE_DAT(0x0E); /* VP17 */ LCD_WRITE_DAT(0x12); /* VP11 */ LCD_WRITE_DAT(0x14); /* VP5 */ LCD_WRITE_DAT(0x17); /* VP0 */ /* * 13. NVGAMCTRL — Negative Gamma Curve (0xE1) * 14 字节负极性 Gamma 校正曲线 (VN63~VN0)。 * 与正极性配合, 保证灰阶居中不偏色。 * * 数据表参考值 (V1.3 §9.2), 微调适配面板。 * */ LCD_WRITE_CMD(0xE1); LCD_WRITE_DAT(0xD0); /* VN63 */ LCD_WRITE_DAT(0x00); /* VN62 */ LCD_WRITE_DAT(0x02); /* VN61 */ LCD_WRITE_DAT(0x07); /* VN59 */ LCD_WRITE_DAT(0x0A); /* VN57 */ LCD_WRITE_DAT(0x28); /* VN50 */ LCD_WRITE_DAT(0x31); /* VN43 */ LCD_WRITE_DAT(0x54); /* VN36 */ LCD_WRITE_DAT(0x47); /* VN29 */ LCD_WRITE_DAT(0x0E); /* VN23 */ LCD_WRITE_DAT(0x1C); /* VN17 */ LCD_WRITE_DAT(0x17); /* VN11 */ LCD_WRITE_DAT(0x1B); /* VN5 */ LCD_WRITE_DAT(0x1E); /* VN0 */ /* * 14. COLMOD — Interface Pixel Format (0x3A) * DBI[2:0] 101 → MCU 接口 16-bit/pixel * DPI[2:0] 101 → RGB 接口 16-bit/pixel * 即 RGB565 格式 (R5G6B5 16 位) * */ LCD_WRITE_CMD(0x3A); LCD_WRITE_DAT(0x55); /* DBI5(16bit), DPI5(16bit) */ /* * 15. CASET — Column Address Set (0x2A) * 设置列地址窗口: XS[15:0]0x0000, XE[15:0]0x00EF * 即 0~239 共 240 列 (覆盖整屏) * */ LCD_WRITE_CMD(0x2A); LCD_WRITE_DAT(0x00); /* XS[15:8] 0 */ LCD_WRITE_DAT(0x00); /* XS[7:0] 0 */ LCD_WRITE_DAT(0x00); /* XE[15:8] 0 */ LCD_WRITE_DAT(0xEF); /* XE[7:0] 239 */ /* * 16. RASET — Row Address Set (0x2B) * 设置行地址窗口: YS[15:0]0x0000, YE[15:0]0x013F * 即 0~319 共 320 行 (覆盖整屏) * */ LCD_WRITE_CMD(0x2B); LCD_WRITE_DAT(0x00); /* YS[15:8] 0 */ LCD_WRITE_DAT(0x00); /* YS[7:0] 0 */ LCD_WRITE_DAT(0x01); /* YE[15:8] 1 */ LCD_WRITE_DAT(0x3F); /* YE[7:0] 319 (0x013F) */ /* * 17. INVON — Display Inversion ON (0x21) — 【已禁用】 * KD024C-4 为常黑 (normally-black) IPS 面板, * 不需要列反转反色。若启用 INVON, 所有像素颜色 * 会被逐位取反, 导致: * GUI_RED (emWin BGR0x001F) → 写入 GRAM → INVON 反转为 * 0xFFE0 → 屏幕上显示黄色, 而非红色。 * * 仅当面板为常白 (normally-white) 时才启用 INVON * 来获得正确的黑底显示, 本面板无需此命令。 * */ /* LCD_WRITE_CMD(0x21); */ /* INVON: 常黑面板禁用 */ /* * 18. DISPON — Display ON (0x29) * 打开显示输出, GRAM 内容开始刷新到面板。 * 此时屏幕显示 GRAM 中的随机数据 (未清屏), * 调用方需自行执行一次清屏操作。 * */ LCD_WRITE_CMD(0x29); /* Display ON */ #endif /* 1 */ }现象使用emwin的颜色宏实际显示出来的颜色对不上原因1.emwin本身会将RGB转成BGR最终调用数据发送指令发送出BGR格式的数据MADCTL — Memory Data Access Control (0x36)** 0x08 0b0000_1000* Bit[7] MY 0: 行地址从上到下* Bit[6] MX 0: 列地址从左到右* Bit[5] MV 0: 行列不交换 (竖屏 240×320)* Bit[4] ML 0: 垂直刷新从上到下* Bit[3] BGR 1: 数据顺序为 BGR (匹配 emWin 驱动层颜色格式)* Bit[2] MH 0: 水平刷新从左到右* Bit[1:0] 0: 保留*2.ST7789V 的 INVON 是给常白面板 (normally-white)用的用来反色。KD024C-4 这块屏是常黑面板 (normally-black)不反色就能正确显示。开了 INVON 等于所有颜色取反RGB 彩色全部乱套解决办法1. LCD_WRITE_CMD(0x36);LCD_WRITE_DAT(0x08); /* MY0 MX0 MV0 ML0 BGR1 MH0 */2. /* * 17. INVON — Display Inversion ON (0x21) — 【已禁用】* KD024C-4 为常黑 (normally-black) IPS 面板,* 不需要列反转反色。若启用 INVON, 所有像素颜色* 会被逐位取反, 导致:* GUI_RED (emWin BGR0x001F) → 写入 GRAM → INVON 反转为* 0xFFE0 → 屏幕上显示黄色, 而非红色。** 仅当面板为常白 (normally-white) 时才启用 INVON* 来获得正确的黑底显示, 本面板无需此命令。* *//* LCD_WRITE_CMD(0x21); */ /* INVON: 常黑面板禁用 */总结BGR格式要对应设置好要根据自己的LCD规格书看看是否需要设置反显

相关新闻

为什么Codex支持deepseek的key了

为什么Codex支持deepseek的key了

2026/8/1 14:34:00

这个变化其实主要发生在 DeepSeek 那边,不是 OpenAI 单独给 Codex 加了 DeepSeek 支持。简单说: Codex 一直支持自定义模型提供商——它通过 config.toml 里的 [model_providers] 配置,可以指向任何"协议兼容"的 API 端点。但 Cod…

Codex额度不够怎么办?ChatGPT Plus、Pro和Credits怎么选

Codex额度不够怎么办?ChatGPT Plus、Pro和Credits怎么选

2026/8/1 14:24:00

Codex额度不够时,先不要急着升级Pro。任务频繁中断,可能是套餐容量不足,也可能是模型选择、项目规模、并行任务数量和执行方式导致消耗过快。正确顺序应该是:先查看实际用量 → 找到消耗来源 → 优化任务方式 → 再决定购买Credit…

字符串算法核心要点与实战技巧详解

字符串算法核心要点与实战技巧详解

2026/8/1 14:24:00

1. 字符串算法专题入门指南 作为算法训练营的第八天课程,字符串专题是每个程序员必须掌握的硬核技能。我在过去五年的算法教学和面试辅导中发现,字符串处理能力直接决定了程序员在技术面试中的表现水平。今天我们就来深入剖析字符串算法的核心要点和实战…

如何5分钟快速上手本地AI模型部署:llama-cpp-python终极实战指南

如何5分钟快速上手本地AI模型部署:llama-cpp-python终极实战指南

2026/8/1 15:24:03

如何5分钟快速上手本地AI模型部署:llama-cpp-python终极实战指南 【免费下载链接】llama-cpp-python Python bindings for llama.cpp 项目地址: https://gitcode.com/gh_mirrors/ll/llama-cpp-python 你是否厌倦了依赖云端API的延迟和隐私问题?想…

3个核心策略优化洛雪音乐体验:解锁全平台无损音质

3个核心策略优化洛雪音乐体验:解锁全平台无损音质

2026/8/1 15:24:03

3个核心策略优化洛雪音乐体验:解锁全平台无损音质 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 您是否曾为洛雪音乐搜索不到心仪的歌曲而烦恼?或是发现某些音源频繁失效&…

GPT2-Chinese终极指南:中文GPT-2模型训练与文本生成深度解析

GPT2-Chinese终极指南:中文GPT-2模型训练与文本生成深度解析

2026/8/1 15:24:03

GPT2-Chinese终极指南:中文GPT-2模型训练与文本生成深度解析 【免费下载链接】GPT2-Chinese Chinese version of GPT2 training code, using BERT tokenizer. 项目地址: https://gitcode.com/gh_mirrors/gp/GPT2-Chinese GPT2-Chinese项目为中文自然语言处理…

蜜柑计划:一个动漫爱好者的追番神器,5分钟带你从安装到精通

蜜柑计划:一个动漫爱好者的追番神器,5分钟带你从安装到精通

2026/8/1 15:24:03

蜜柑计划:一个动漫爱好者的追番神器,5分钟带你从安装到精通 【免费下载链接】mikan_flutter 蜜柑计划( https://mikanani.me ),🚧 持续开发中... 项目地址: https://gitcode.com/gh_mirrors/mi/mikan_flu…

基于Jetson Orin与ROS2的UGV自主移动机器人开发全流程解析

基于Jetson Orin与ROS2的UGV自主移动机器人开发全流程解析

2026/8/1 15:24:02

1. 项目缘起:为什么是UGV、Jetson Orin与ROS2的组合?最近在机器人圈子里,一个高频出现的组合词是“UGV Rover Jetson Orin ROS2”。这听起来像是一堆技术名词的堆砌,但对于真正想动手造一台能跑、能看、能思考的无人地面小车&…

Terraria源代码完全指南:从零开始掌握游戏开发核心技术

Terraria源代码完全指南:从零开始掌握游戏开发核心技术

2026/8/1 15:14:02

Terraria源代码完全指南:从零开始掌握游戏开发核心技术 【免费下载链接】Terraria-Source-Code 项目地址: https://gitcode.com/gh_mirrors/te/Terraria-Source-Code 想要深入了解经典沙盒游戏Terraria的内部工作原理吗?这篇终极指南将带你从零开…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/8/1 0:15:49

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/8/1 4:47:48

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/1 0:03:03

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/1 0:03:03

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/1 0:03:03

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…