尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【LTDC】在 RGBLCD 屏上实现任意位置画点和读点

【LTDC】在 RGBLCD 屏上实现任意位置画点和读点
📅 发布时间:2026/6/20 15:56:51

前言

此篇文章仅作笔记分享,内容来源为:

【正点原子】全是干货 | 手把手教你学STM32的LTDC

这篇文章的目的就是熟悉在 RGBLCD 上的绘图操作,了解如何往显存中对应的位置写数据。

绘图实质

  1. 由于我们的屏幕是 ATK 4.3 800 * 480,所以会对应在 SDRAM 中按顺序开辟一个大小为 800 * 480 * 2 的内存,其中 2为一个像素的大小(RGB565一个像素点为两个字节)。
  2. 帧缓冲的起始地址就是 SDRAM 中为屏幕所开辟的第一个内存地址(S_Addr)。
  3. 对于定位(x, y),我们就是要计算某个点对于显存首地址的内存偏移是多少,其中分为了行上的 a 距离,和列上的 b 距离。
  4. 横屏:位置 = (width * y + x) * 2,其中 width 是宽度 800,x 是列数(单位是像素),y 是行数(单位是像素),2是单个像素大小)。
    (uint16_t*)((uint32_t)s_addr + pixsize * (pwidth * y + x))
  5. 竖屏:位置 = (width * (height - x - 1) + y) * 2,其中 width 是宽度 800,其中 height 是宽度 480,x 是行数(单位是像素),y 是列数(单位是像素),2是单个像素大小)。
    (uint16_t*) ((uint32_t)s_addr + pixsize * (pwidth * (pheight - x - 1) + y))

image

程序

LTDC 程序

点击查看代码
__attribute__((section (".RAM_SDRAM"))) uint16_t framebuf[pHeight][pWidth];#define LTDC_ADDR	0xC0000000/* 常用画笔颜色 */
#define WHITE           0xFFFF      /* 白色 */
#define BLACK           0x0000      /* 黑色 */
#define RED             0xF800      /* 红色 */
#define GREEN           0x07E0      /* 绿色 */
#define BLUE            0x001F      /* 蓝色 */ 
#define MAGENTA         0xF81F      /* 品红色/紫红色 = BLUE + RED */
#define YELLOW          0xFFE0      /* 黄色 = GREEN + RED */
#define CYAN            0x07FF      /* 青色 = GREEN + BLUE */  /* 非常用颜色 */
#define BROWN           0xBC40      /* 棕色 */
#define BRRED           0xFC07      /* 棕红色 */
#define GRAY            0x8430      /* 灰色 */ 
#define DARKBLUE        0x01CF      /* 深蓝色 */
#define LIGHTBLUE       0x7D7C      /* 浅蓝色 */ 
#define GRAYBLUE        0x5458      /* 灰蓝色 */ 
#define LIGHTGREEN      0x841F      /* 浅绿色 */  
#define LGRAY           0xC618      /* 浅灰色(PANNEL),窗体背景色 */ 
#define LGRAYBLUE       0xA651      /* 浅灰蓝色(中间层颜色) */ 
#define LBBLUE          0x2B12      /* 浅棕蓝色(选择条目的反色) */ /* 宽度和高度 */
#define pWidth	800
#define pHeight	480/* 横屏和竖屏 */
#define HOR	true	// 横屏
#define VER	false	// 竖屏/* RGB类型 */
#define RGB888		1
#define RGB565		2
#define RGB_TYPE	RGB565/* 像素大小 */
#if RGB_TYPE == RGB888
#define PIXSIZE 3	// 单个像素大小
#endif
#if RGB_TYPE == RGB565
#define PIXSIZE 2	// 单个像素大小
#endifvoid ltdc_draw_point(uint16_t x, uint16_t y, uint32_t color)
{if (HOR) {	// 横屏*(uint16_t*)((uint32_t)framebuf + PIXSIZE * (pWidth * y + x)) = color;} else {	// 竖屏*(uint16_t*)((uint32_t)framebuf + PIXSIZE * (pWidth * (pHeight - x - 1) + y)) = color;}
}uint32_t ltdc_read_point(uint16_t x, uint16_t y, uint32_t color)
{if (HOR) {	// 横屏return *(uint16_t*)((uint32_t)framebuf + PIXSIZE * (pWidth * y + x)) = color;} else {	// 竖屏return *(uint16_t*)((uint32_t)framebuf + PIXSIZE * (pWidth * (pHeight - x - 1) + y)) = color;}
}

main() 测试程序

点击查看代码
	ltdc_draw_point(100, 100, RED);ltdc_draw_point(110, 110, RED);ltdc_draw_point(120, 120, RED);ltdc_draw_point(130, 130, RED);ltdc_draw_point(140, 140, RED);ltdc_draw_point(150, 150, RED);ltdc_draw_point(160, 160, RED);ltdc_draw_point(170, 170, RED);ltdc_draw_point(180, 180, RED);ltdc_draw_point(190, 190, RED);ltdc_draw_point(200, 200, RED);printf("pixcolor = %x \r\n", ltdc_read_point(140, 140, RED));

测试结果

image

image

博客导航

博客导航

本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/19163646

相关新闻

  • 使用C# 控制ethercat从站设备
  • 2025 年坡口机源头厂家最新推荐排行榜:欧盟 CE 认证企业领衔,含 15 年工业服务经验品牌,自走式/自动/板材/管道坡口机厂家推荐
  • 实战练习:小软件页面间跳转传值 子页面数据渲染

最新新闻

  • IPXWrapper:让经典游戏在Windows 11重获联机生命的终极方案
  • 北京昌平离婚律所哪家好:3维度甄别昌平专业婚姻律师团 - 品牌2026
  • 本地 AI 写作环境搭建:Ollama + Open WebUI + Serper 实战记录
  • 深度剖析qrcode.vue:从技术选型到架构设计的性能优化实践
  • 3分钟免费安装VideoDownloadHelper:简单视频下载插件终极指南
  • 暗黑破坏神2存档编辑器终极教程:三步掌握角色与装备自由定制

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号