当前位置: 首页 > news >正文

STM32 上实现 SD 卡读取 JPEG 解码 TFT 显示

一、总体架构

SD 卡 (FATFS)↓
JPEG 文件↓
TJpgDec(轻量 JPEG 解码库)↓
RGB565 像素缓冲↓
TFT LCD(DMA 刷新)

优点

  • 内存占用极小(几 KB)
  • 解码速度快
  • 适合 STM32F1 / F4 / G0 / H7

二、硬件要求

模块 建议
MCU STM32F407 / F429 / H743(带 FSMC / LTDC 更好)
SD 卡 SPI 或 SDIO
LCD ILI9341 / ILI9488 / ST7789
RAM ≥ 32KB(解码缓冲)

STM32F103 只能显示小分辨率 JPEG(≤ 320×240)


三、软件组件选型

功能
文件系统 FatFs
JPEG 解码 TJpgDec(官方轻量库)
显示驱动 自定义 LCD 驱动
刷新方式 DMA + RGB565

四、关键数据结构

#define LCD_WIDTH   320
#define LCD_HEIGHT  240uint16_t lcd_buf[LCD_WIDTH];   // 一行像素缓冲

五、FatFs + SD 卡初始化

#include "ff.h"
#include "diskio.h"FATFS fs;
FIL file;void SD_Init(void)
{f_mount(&fs, "", 0);
}

六、TJpgDec 移植(核心)

1、下载 TJpgDec

官网:http://elm-chan.org/fsw/tjpgd/

2、实现输入函数(从 SD 卡读数据)

#include "tjpgd.h"UINT jpeg_read(JDEC* jd, BYTE* buff, UINT nbyte)
{UINT br;FIL *fp = (FIL*)jd->device;f_read(fp, buff, nbyte, &br);return br;
}

3、实现输出函数(写 LCD)

UINT jpeg_write(JDEC* jd, void* bitmap, JRECT* rect)
{uint16_t* src = (uint16_t*)bitmap;uint16_t x, y;for (y = rect->top; y <= rect->bottom; y++) {for (x = rect->left; x <= rect->right; x++) {LCD_DrawPixel(x, y, *src++);}}return 1;
}

更高效版本(推荐)
使用 LCD_DrawBitmap(x, y, w, h, buf) + DMA


七、JPEG 解码并显示

void Show_JPEG(char *filename)
{JDEC jdec;JRESULT res;uint8_t work[3100];   // 解码工作缓冲(≥ 3100)f_open(&file, filename, FA_READ);res = jd_prepare(&jdec, jpeg_read, work, sizeof(work), &file);if (res != JDR_OK) {f_close(&file);return;}res = jd_decomp(&jdec, jpeg_write, 0); // 0 = 原尺寸f_close(&file);
}

八、TFT LCD 显示接口(示例)

void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color)
{LCD_SetCursor(x, y);LCD_WriteData(color);
}

DMA 刷新(大幅提升速度)

void LCD_DrawBitmap(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t *buf)
{LCD_SetWindow(x, y, w, h);HAL_DMA_Start(&hdma_memtomem, (uint32_t)buf, (uint32_t)&LCD_RAM, w * h);
}

参考代码 stm32读取sd卡的jpeg图片,然后解码显示在tft液晶屏上面 www.youwenfan.com/contentcnu/69805.html

九、主函数流程

int main(void)
{HAL_Init();SystemClock_Config();MX_SDIO_SD_Init();MX_FATFS_Init();LCD_Init();SD_Init();LCD_Clear(BLACK);Show_JPEG("test.jpg");while (1);
}
http://www.jsqmd.com/news/809071/

相关文章:

  • PowerToys中文汉化终极指南:三步让Windows效率工具说中文
  • 温州市方氏建材:文成靠谱的建材批发厂家有哪些 - LYL仔仔
  • 宁波甬旭遮阳设备:海曙膜结构停车棚出售推荐几家 - LYL仔仔
  • TrueCrypt停更后,我的加密数据怎么办?手把手教你迁移到BitLocker(附详细图文)
  • RT-Thread FAL组件深度体验:我是如何用STM32F407+W25Q128构建稳定存储分区的
  • 2026年江苏无锡充电桩运营系统与社区生态物联解决方案深度横评指南 - 企业名录优选推荐
  • 中式汉堡加盟品牌排行:5个热门项目实测对比 - 奔跑123
  • 从Segment Statistics到精准量化:3D Slicer中ROI质心与体表面积的实战解析
  • Python 的协程模型和 JavaScript 的 async/await
  • 嵌入式系统演进:从资源受限到异构计算与开源生态的工程实践
  • 量子计算原子阵列组装:算法突破与工程实践
  • 东莞市百鑫资源再生利用:东莞市稀有金属回收推荐几家 - LYL仔仔
  • 从选型到调试:STM32H750VBT6的DSP、FPU双核武器库,CubeMX配置避坑全记录
  • CORP开源协作平台:基于Markdown与Git的下一代协作范式
  • 终极指南:3分钟解决Windows 10/11音频增强软件兼容性问题
  • 珠海港式火锅品控技术拆解:从汤底到场景的硬核逻辑 - 奔跑123
  • 揭秘JD-GUI:3个高级场景下Java反编译的实战应用
  • 2026年山东充电桩SaaS运营系统深度横评:社区生态物联一站式解决方案与资金扶持对比指南 - 企业名录优选推荐
  • PyQt5到PyQt6迁移实战:核心变更点、适配策略与未来展望
  • 深度探索:Windows上的安卓应用安装革命,5个步骤实现跨平台无缝体验
  • 2026年江苏无锡充电桩运营系统深度横评:从技术贴牌到资金赋能的全场景解决方案 - 企业名录优选推荐
  • 教育机构构建ai编程教学平台时采用taotoken统一管理学生token资源的方案
  • 2026上海冷冻冷库安装公司电话,专业保鲜冷库安装服务快速对接 - 品牌2025
  • Cursor Pro破解工具:5步实现永久免费使用的完整方案
  • 爱思唯尔把Meta告了:拿Sci-Hub盗版论文训练大模型
  • 在nodejs后端服务中集成taotoken实现多轮对话的异步处理
  • ArcGIS标注转注记实战:手把手教你制作可精细编辑的河流流向标注
  • 2026年河南充电桩运营系统与社区生态物联解决方案深度横评:SaaS贴牌定制与资金扶持选购指南 - 企业名录优选推荐
  • AI灭绝风险分类与防御:从无意边缘化到有意攻击的全景分析
  • CentOS 7下VNC连接黑屏/只有鼠标?手把手排查GNOME+VNC的常见坑(附解决方案)