你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H735G-DK 评测】二、利用LTDC在 LCD 上打印字符串

[复制链接]
patch1582 发布时间:2026-8-21 13:54
STM32H735G-DK 自带 MB1315 子板,上面是 4.3 寸 TFT,分辨率 480×272,RGB565 并行接口,经 CN19 直连 H735IGK6 的 LTDC 外设;背光由 PG15 控制,触摸是 FT5336。

H735 的 LTDC 自带两层图层,可从内部 SRAM/AXI SRAM/SDRAM/OSPI RAM 取显存,显存绝对不能放 DTCM(0x2000_0000 起),LTDC 总线读不到,这是 H735 黑屏第一大坑。

480×272×2Byte ≈ 261KB,H735 内部 AXI SRAM 有 512KB 够用,不必外挂 SDRAM。官方提供两个显示图片的例程,不能显示字符串。

我要显示字符串,自己配 LTDC是最土的法子,我就是用的这个土法子。调用font12、font16、font24的字模文件,字模数组按 RGB565 写进 framebuf 对应像素偏移,LTDC 自动刷出来。
再main.h文件中要调用不少头文件
#include "stm32h7xx_hal_conf.h"
#include "stm32h735g_discovery.h"
#include "stm32h7xx_hal_ospi.h"     // ??? include ????
#include "stm32h735g_discovery_lcd.h"
#include "stm32_lcd.h"   /* UTIL_LCD_* */
#include "fonts.h"

定义如下显示字符函数

#define HW_WIDTH    480   // ??????
#define HW_HEIGHT   272   // ??????
#define FB_ADDR     ((uint16_t*)0x24000000)

static void draw_pixel_v(uint32_t x, uint32_t y, uint16_t color)
{
int hx = y;                    // ??y ? ??x(0479)
int hy = (HW_HEIGHT - 1) - x;  // ??x ? ??y(??,0271)
if (hx >= 0 && hx < HW_WIDTH && hy >= 0 && hy < HW_HEIGHT)
FB_ADDR[hy * HW_WIDTH + hx] = color;
}
/* ---------- ? Font12 ???(????????)---------- */
static void draw_char12_v(uint32_t x, uint32_t y, char c, uint16_t color)
{
if (c < 0x20 || c > 0x7E) return;

uint32_t char_index = c - 0x20;
const uint8_t *glyph = &Font12_Table[char_index * 12];

for (int row = 0; row < 12; row++) {
    uint8_t bits = glyph[row];
    for (int col = 0; col < 7; col++) {
        if (bits & (0x80 >> col)) {
            draw_pixel_v(x + col, y + row, color);
        }
    }
}
}

/* ---------- ????(??????)---------- */
static void draw_string12_v(uint32_t x, uint32_t y, const char *str, uint16_t color)
{
int cx = x;
while (*str) {
draw_char12_v(cx, y, *str, color);
cx += 8;  // 7??? + 1??
str++;
}
}

开始用的font24字符很霸气。每个字符 24 像素高,在 480×272 的屏上几乎占满半行。一行最多塞 20 个字符,但那个视觉冲击力是真的猛:黑底白字,每个笔画粗壮饱满,老远就能看清,三行字占掉 120 像素高度。
但信息密度太低。想多打两行,没地方了。24px 的字在 272 像素高的横屏上,顶多塞 十来行 行就到底,而且每行也就几个字。
81.jpg

把 Font24 换成 Font12 的那一刻,屏幕上突然瘦了下来,信息量直接翻倍。12px 的字符在 RGB565 屏上刚好是最漂亮的尺度,后期要把 CoreMark 分数、编译器版本、缓存状态全堆上去,屏面终于有了正经仪表盘的味道。
横屏 480 宽塞 Font12 可以放 40 个字符,但 272 高也只能放 22 行左右,参数再多就挤不下。横屏时那些短字符串,比如 "Hello World!"也占一行,空置率太高。
82.jpg
还是得竖屏,屏幕逻辑分辨率变成 272×480。这一转,整个布局逻辑全变了:宽度从 480 缩到 272 → Font12 每行只能放 22 个字符,长字符串必须拆行
高度从 272 拉到 480 → 能放 40 行 Font12 文字,信息纵向展开后节奏感出来了,参数一行一个,像手机上的系统信息页,从上往下扫读,层次分明。
83.jpg
竖屏妙啊,嵌入式系统信息天然适合纵向列表。
而且竖屏 272×480 的显存还是 261KB,CPU 不用多干任何活。

小结避坑:
黑屏只背光亮:九成显存地址在 DTCM,或 PLL3_R 没给 LTDC 时钟,或 PH6 复位脚没拉。
颜色红蓝反:RGB565 字节序或 R/B 线交换,DMA2D 做 Red/Blue Swap 最快。
字糊成竖条:Layer 窗口大小和显存 stride 不一致(480×2 必须对齐 64 字节 AXI 突发)。

收藏 评论0 发布时间:2026-8-21 13:54

举报

0个回答

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版