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

用STM32F103RCT6驱动4寸ST7796S屏,从接线到显示图片的保姆级教程

STM32F103RCT6驱动4寸ST7796S液晶屏全流程实战指南第一次拿到STM32开发板和4寸液晶屏时看着密密麻麻的引脚和陌生的专业术语确实容易让人望而生畏。但别担心本文将手把手带你完成从硬件连接到软件调试的全过程。不同于简单的代码复制粘贴我们会深入每个环节的技术原理让你真正理解为什么这样接线、为什么这样配置。即使你从未接触过SPI通信或LCD驱动跟着本文的步骤也能在2小时内让屏幕亮起来并显示自定义内容。1. 硬件准备与原理剖析1.1 认识你的硬件装备ST7796S驱动的4寸TFT液晶屏具有320x480分辨率支持65K色彩显示。与常见的ILI9341驱动相比ST7796S在刷新率和色彩表现上更胜一筹。核心参数对比如下参数ST7796SILI9341分辨率480x320320x240显存容量345600字节153600字节接口类型4线SPI/8位并口4线SPI/8位并口最大刷新率60Hz40Hz开发板选用STM32F103RCT6其硬件SPI接口最高支持18MHz时钟频率完全满足ST7796S的通信需求。特别要注意的是虽然屏幕标称支持3.3-5V供电但为了与STM32电平匹配建议统一使用3.3V供电。1.2 深度理解SPI通信机制SPI协议通过四根线实现全双工通信SCK时钟信号由主设备产生MOSI主设备输出从设备输入MISO主设备输入从设备输出本项目中未使用CS片选信号低电平有效ST7796S的SPI时序特点// 典型SPI写时序 void SPI_Write(uint8_t data) { for(int i0; i8; i) { SCK_LOW; if(data 0x80) MOSI_HIGH; else MOSI_LOW; delay_ns(50); // 保持时间 SCK_HIGH; data 1; delay_ns(50); // 建立时间 } }注意ST7796S要求数据在SCK上升沿被采样CPOL0、CPHA0的SPI模式正符合这一要求1.3 关键引脚连接详解根据STM32F103RCT6的引脚复用功能推荐以下连接方案屏幕引脚功能说明STM32引脚备注VCC3.3V电源3.3V避免使用5V以防电平不匹配GND地线GND确保共地CS片选PB11软件控制片选RESET硬件复位PB12上电复位必需DC/RS数据/命令选择PB10高电平写数据低电平写命令SDI(MOSI)SPI数据线PB15主设备输出SCKSPI时钟PB13配置为推挽输出LED背光控制PB9PWM调光可实现亮度调节常见接线错误排查屏幕无反应检查RESET引脚是否完成复位时序先拉低100ms再拉高花屏现象确认SPI时钟频率不超过15MHz初期建议设为9MHz局部显示异常检查DC引脚电平切换是否及时2. 开发环境搭建与工程配置2.1 工具链准备推荐使用Keil MDK-ARM开发环境配合ST-Link调试器。关键软件版本要求Keil uVision V5.28以上STM32F1xx_DFP 2.3.0以上ST-Link Utility最新版工程目录结构应包含/Drivers /CMSIS // 内核支持文件 /STM32F1xx_HAL // HAL库文件 /User /Inc // 头文件 lcd.h spi.h /Src // 源文件 main.c lcd.c spi.c2.2 SPI外设初始化详解硬件SPI2的初始化需要特别注意时钟配置void SPI2_Init(void) { SPI_HandleTypeDef hspi2; hspi2.Instance SPI2; hspi2.Init.Mode SPI_MODE_MASTER; hspi2.Init.Direction SPI_DIRECTION_2LINES; hspi2.Init.DataSize SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity SPI_POLARITY_LOW; hspi2.Init.CLKPhase SPI_PHASE_1EDGE; hspi2.Init.NSS SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_8; // 9MHz 72MHz PCLK hspi2.Init.FirstBit SPI_FIRSTBIT_MSB; hspi2.Init.TIMode SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation SPI_CRCCALCULATION_DISABLE; HAL_SPI_Init(hspi2); __HAL_SPI_ENABLE(hspi2); }提示初期调试时可先将预分频设为164.5MHz稳定后再提高频率2.3 LCD驱动关键参数配置ST7796S需要配置约30个寄存器才能正常工作。主要初始化序列包括电源控制配置0xC0-0xC5面板驱动时序0xB0-0xB7Gamma校正设置0xE0-0xE1像素格式设置0x3A典型初始化代码片段void ST7796S_Init(void) { LCD_WriteCmd(0xF0); LCD_WriteData(0xC3); // 解锁扩展命令 LCD_WriteCmd(0xF0); LCD_WriteData(0x96); LCD_WriteCmd(0x36); LCD_WriteData(0x68); // 设置扫描方向 LCD_WriteCmd(0x3A); LCD_WriteData(0x05); // 16位像素格式 // ...更多寄存器配置 LCD_WriteCmd(0x11); // 退出睡眠模式 delay_ms(120); // 必需等待120ms LCD_WriteCmd(0x29); // 开启显示 }3. 显示功能实现与优化3.1 基础绘图功能开发实现像素级操作是图形显示的基础。核心函数包括// 设置显示窗口 void LCD_SetWindow(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { LCD_WriteCmd(0x2A); LCD_WriteData(x18); LCD_WriteData(x10xFF); LCD_WriteData(x28); LCD_WriteData(x20xFF); LCD_WriteCmd(0x2B); LCD_WriteData(y18); LCD_WriteData(y10xFF); LCD_WriteData(y28); LCD_WriteData(y20xFF); LCD_WriteCmd(0x2C); // 准备写入GRAM } // 绘制单个像素 void LCD_DrawPixel(uint16_t x, uint16_t y, uint16_t color) { LCD_SetWindow(x, y, x, y); LCD_WriteData(color8); LCD_WriteData(color0xFF); }3.2 高级图形算法实现基于基础绘图函数可以构建更复杂的图形功能矩形填充优化算法void LCD_FillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) { uint32_t total (uint32_t)w * h; LCD_SetWindow(x, y, xw-1, yh-1); LCD_DC_HIGH; // 切换到数据模式 LCD_CS_LOW; while(total--) { SPI2-DR color8; while(!(SPI2-SR SPI_SR_TXE)); SPI2-DR color0xFF; while(!(SPI2-SR SPI_SR_TXE)); } LCD_CS_HIGH; }中文字库显示方案使用GB2312编码的16x16点阵字库将字库转换为C数组存储在外部Flash实现字符解码函数void Show_Chinese(uint16_t x, uint16_t y, uint8_t *font, uint16_t color) { uint8_t i,j; uint16_t data; LCD_SetWindow(x, y, x15, y15); for(i0; i32; i) { data font[i]; for(j0; j8; j) { if(data 0x80) LCD_WriteData(color); else LCD_WriteData(BACK_COLOR); data 1; } } }3.3 图片显示方案对比方案优点缺点适用场景直接数组存储实现简单无需文件系统占用大量Flash空间小图标50KBSD卡BMP解码可动态更换图片需要文件系统支持需要频繁更换内容的场景Flash存储压缩节省空间需要解压算法中大型图片资源BMP图片显示代码示例void Show_BMP(uint16_t x, uint16_t y, const uint8_t *bmp) { uint32_t offset *(uint32_t*)(bmp10); // 获取像素数据偏移 uint32_t width *(uint32_t*)(bmp18); uint32_t height *(uint32_t*)(bmp22); uint8_t *pixel bmp offset; LCD_SetWindow(x, y, xwidth-1, yheight-1); for(uint32_t i0; iwidth*height; i) { uint16_t color RGB888toRGB565(pixel[2], pixel[1], pixel[0]); LCD_WriteData(color8); LCD_WriteData(color0xFF); pixel 3; // 每个像素占3字节 } }4. 性能优化与高级功能4.1 双缓冲技术实现流畅动画在显示复杂动画时直接操作显存会导致闪烁。双缓冲方案可有效解决在内存中开辟两块显示缓冲区后台完成所有绘图操作通过DMA快速切换显示缓冲区关键实现代码uint16_t buffer1[LCD_WIDTH*LCD_HEIGHT]; uint16_t buffer2[LCD_WIDTH*LCD_HEIGHT]; uint16_t *active_buffer buffer1; void LCD_Refresh(void) { DMA_HandleTypeDef hdma; // 配置DMA从内存到SPI hdma.Instance DMA1_Channel5; hdma.Init.Direction DMA_MEMORY_TO_PERIPH; hdma.Init.PeriphInc DMA_PINC_DISABLE; hdma.Init.MemInc DMA_MINC_ENABLE; hdma.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; hdma.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; HAL_DMA_Init(hdma); LCD_SetWindow(0, 0, LCD_WIDTH-1, LCD_HEIGHT-1); HAL_SPI_Transmit_DMA(hspi2, (uint8_t*)active_buffer, LCD_WIDTH*LCD_HEIGHT*2); // 切换活跃缓冲区 active_buffer (active_buffer buffer1) ? buffer2 : buffer1; }4.2 触摸功能集成XPT2046触摸控制器通过SPI接口与主控通信。典型读取流程拉低CS信号启动转换发送控制字节0x90用于X坐标0xD0用于Y坐标读取12位ADC值转换为屏幕坐标uint16_t TP_Read(uint8_t cmd) { uint8_t data[3]; uint16_t val; TP_CS_LOW; HAL_SPI_Transmit(hspi2, cmd, 1, 100); HAL_SPI_Receive(hspi2, data, 3, 100); TP_CS_HIGH; val ((data[0]8) | data[1]) 3; return val 0xFFF; } void TP_GetXY(uint16_t *x, uint16_t *y) { *x TP_Read(0x90); // 读取X坐标 *y TP_Read(0xD0); // 读取Y坐标 // 转换为屏幕坐标 *x (*x - TP_X_MIN) * LCD_WIDTH / (TP_X_MAX - TP_X_MIN); *y (*y - TP_Y_MIN) * LCD_HEIGHT / (TP_Y_MAX - TP_Y_MIN); }4.3 低功耗优化策略当设备由电池供电时可采取以下措施降低功耗动态调整背光亮度PWM控制空闲时降低SPI时钟频率利用ST7796S的睡眠模式发送0x10命令关闭未使用的外设时钟典型电源管理代码void LCD_EnterSleep(void) { LCD_WriteCmd(0x10); // 进入睡眠模式 HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_RESET); __HAL_SPI_DISABLE(hspi2); // 关闭SPI时钟 } void LCD_WakeUp(void) { __HAL_SPI_ENABLE(hspi2); LCD_WriteCmd(0x11); // 退出睡眠模式 delay_ms(120); HAL_GPIO_WritePin(LCD_BL_GPIO_Port, LCD_BL_Pin, GPIO_PIN_SET); }

相关文章:

用STM32F103RCT6驱动4寸ST7796S屏,从接线到显示图片的保姆级教程

STM32F103RCT6驱动4寸ST7796S液晶屏全流程实战指南 第一次拿到STM32开发板和4寸液晶屏时,看着密密麻麻的引脚和陌生的专业术语,确实容易让人望而生畏。但别担心,本文将手把手带你完成从硬件连接到软件调试的全过程。不同于简单的代码复制粘贴…...

抖音下载器完整指南:从单视频到批量下载的一站式解决方案

抖音下载器完整指南:从单视频到批量下载的一站式解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

不止于TurtleBot3:在Isaac Sim中为你的自定义机器人模型搭建ROS通信桥梁

超越标准模型:在Isaac Sim中为自定义机器人构建ROS通信的全流程指南 当开发者尝试将实验室中的独特机器人设计接入仿真环境时,往往面临标准教程无法覆盖的挑战。本文将以工业级机器人开发流程为基础,详解如何突破TurtleBot3等预设模型的限制&…...

CUDA 13算子开发生死线:3张决定推理延迟的架构设计图,错过今天将多花200+ GPU小时调优

第一章:CUDA 13算子开发生死线:技术演进与性能临界点 CUDA 13 的发布标志着 GPU 算子开发进入高精度、低延迟与跨代兼容并重的新阶段。相较于 CUDA 12.x,其对 FP8 原生支持、统一内存访问模型重构、以及 Warp Matrix Instructions&#xff08…...

5分钟上手BilibiliDown:跨平台B站视频下载终极指南

5分钟上手BilibiliDown:跨平台B站视频下载终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/B…...

ABAQUS盾构管片:单环多环精细化建模CAE源文件及录屏讲解教程 ‘一环六块,环宽1.5m...

ABAQUS盾构管片精细化建模cae源文件及录屏讲解教程 包含单环和多环两种 一环6块,环宽1.5m,管片厚度350mm 可以进行计算最近在搞盾构隧道数值模拟,发现管片建模真是个体力活。今天就拿ABAQUS实操经验来说说,怎么快速搞定精细化建模…...

告别手动计数!STM32定时器主从模式新玩法:TIM3+TIM4自动发完脉冲就停

STM32定时器主从模式实战:精准脉冲控制的工程艺术 在嵌入式系统开发中,精确控制脉冲数量是许多应用场景的核心需求——从步进电机驱动到LED灯带控制,再到伺服系统定位。传统方案往往依赖CPU持续监控和软件计数,不仅占用宝贵的处理…...

CodeCombat游戏化编程学习指南:5步从零基础到代码高手

CodeCombat游戏化编程学习指南:5步从零基础到代码高手 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat CodeCombat是一款革命性的游戏化编程学习平台,它将枯燥的代码学习转…...

Reference Extractor:如何高效提取Word文档中的Zotero和Mendeley引用?

Reference Extractor:如何高效提取Word文档中的Zotero和Mendeley引用? 【免费下载链接】ref-extractor Reference Extractor - Extract Zotero/Mendeley references from Microsoft Word files 项目地址: https://gitcode.com/gh_mirrors/re/ref-extra…...

ROS Melodic下,如何用MetaMemoryT修改版Robotiq包快速搞定Gazebo仿真(含UR5整合)

ROS Melodic下使用MetaMemoryT版Robotiq包实现UR5与夹爪的Gazebo高效仿真 在机器人仿真领域,UR5机械臂与Robotiq夹爪的组合堪称经典配置。然而许多开发者在ROS Melodic环境下进行Gazebo仿真时,常常陷入繁琐的URDF/XACRO文件修改泥潭。本文将介绍一种更优…...

彻底告别DLL缺失烦恼:VisualCppRedist AIO一键解决Windows运行库问题

彻底告别DLL缺失烦恼:VisualCppRedist AIO一键解决Windows运行库问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&am…...

别再重跑模拟了!手把手教你修复LAMMPS的dump轨迹,让它变成MDAnalysis能读的标准XYZ

从LAMMPS到MDAnalysis:零成本修复非标准轨迹文件的工程化实践 当你在凌晨三点完成长达72小时的分子动力学模拟,满心欢喜准备用MDAnalysis分析轨迹时,突然发现LAMMPS输出的dump文件根本无法被读取——这种崩溃感每个计算化学研究者都深有体会。…...

5G NR网络优化实战:手把手教你配置CSI报告,提升下行速率(附RRC信令解析)

5G NR网络优化实战:CSI报告配置与下行速率提升全解析 在5G网络优化工作中,CSI(Channel State Information)报告的合理配置直接影响着终端用户的下行速率体验。作为网络优化工程师,我们需要深入理解CSI报告机制&#xf…...

数据库日常检查

文章目录环境文档用途详细信息环境 系统平台:银河麒麟 (X86_64),Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7 版本:9.0.4,4.5.10,4.5.8,9.0.3 文档用途 通过系统化的数据库日常检查&…...

【LeetHOT100】环形链表Ⅱ——寻找环的入口(Java多解法详解)

一、题目描述 142. 环形链表 II 给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 null。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始&…...

保姆级教程:在CentOS 7和Ubuntu 22.04上解决VMware Workstation 17 Pro的模块签名报错

深度解析:CentOS 7与Ubuntu 22.04下VMware Workstation 17 Pro内核模块签名全流程 当你满心欢喜地在Linux系统上安装VMware Workstation 17 Pro,准备大展拳脚时,突然跳出的模块签名报错就像一盆冷水浇下来。别担心,这不是世界末日…...

【LeetHOT100】环形链表——Java多解法详解

一、题目描述 141. 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连…...

RestSharp实战:5分钟搞定微信支付/天气API接口调用(C#保姆级教程)

RestSharp实战:5分钟搞定微信支付与天气API调用(C#保姆级教程) 当我们需要快速集成第三方API时,一个高效、简洁的HTTP客户端库能大幅提升开发效率。RestSharp作为.NET生态中广受欢迎的轻量级解决方案,以其直观的API设计…...

AI Agent公司集体转型:从“卖铲子”到下场做漫剧,内容为王时代已至!

1. AI漫剧新玩家入场如今随便点开一部漫剧,评论区大多是关注剧情和制作的观众,鲜少有人关注背后的制作公司。然而,这些公司的身份正日益多元化。短剧公司做漫剧,商业模式衔接顺畅;动画公司凭借制作技术,开拓…...

Xiaomi MiMo-V2.5 系列模型公测,推理速度更快、成本更低,还推订阅优惠!

MiMo-V2.5 系列模型公测开启,功能亮点多Xiaomi MiMo-V2.5 系列模型正式开启公测,该系列包含 MiMo-V2.5、V2.5-Pro 、V2.5-TTS Series、V2.5-ASR。其中,MiMo-V2.5-Pro 专为长难 Agent 任务打造,MiMo-V2.5 覆盖绝大多数通用 Agent 场…...

FlexASIO配置终极指南:从零开始掌握专业音频驱动调优

FlexASIO配置终极指南:从零开始掌握专业音频驱动调优 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://gitcode.c…...

STM32G4 HAL库下IIC通信避坑指南:模拟IIC驱动AT24C02和MCP4017的常见时序问题

STM32G4 HAL库下IIC通信避坑指南:模拟IIC驱动AT24C02和MCP4017的常见时序问题 在嵌入式开发中,IIC通信因其简单性和高效性被广泛应用。然而,当我们在STM32G4平台上使用HAL库通过GPIO模拟IIC驱动AT24C02(EEPROM)和MCP40…...

2026款乐道L90上市:30万级集齐顶尖智能科技,八大板块超70项升级刷新出行标杆

2026款乐道L90上市:30万级集齐顶尖智能科技,八大板块超70项升级刷新家庭出行标杆2026年4月21日,乐道L90智能焕新发布会在杭州举行,2026款乐道L90正式上市。官方指导价26.58万元起,若采用BaaS电池租用方式购买&#xff…...

STM32调试器大比拼:ST-LINK vs J-LINK vs DAP,哪个更适合你?

STM32调试器大比拼:ST-LINK vs J-LINK vs DAP,哪个更适合你? 在嵌入式开发的世界里,调试器就像外科医生的手术刀,是精准定位问题和修复代码的必备工具。对于STM32开发者来说,面对市面上琳琅满目的调试工具&…...

5分钟学会m4s-converter:B站缓存视频永久保存终极指南

5分钟学会m4s-converter:B站缓存视频永久保存终极指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过B站收藏的视频突然…...

VSCode协作性能崩塌真相曝光(压测报告编号VS-2026-RP-087):为什么92%的团队在5人以上协作时触发渲染阻塞?

更多请点击: https://intelliparadigm.com 第一章:VSCode协作性能崩塌的底层归因与现象复现 当多个开发者通过 Live Share 或 GitHub Codespaces 同时编辑大型 TypeScript 项目时,VSCode 常出现 CPU 持续飙高(>90%&#xff09…...

3步搞定Windows 10/11的PL2303老芯片驱动问题 [特殊字符]

3步搞定Windows 10/11的PL2303老芯片驱动问题 🚀 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否在Windows 10或Windows 11系统上遇到了PL2303串口设…...

终极Visual C++运行库全家桶:一站式解决Windows软件运行难题

终极Visual C运行库全家桶:一站式解决Windows软件运行难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 还在为软件启动失败、游戏无法运行而烦恼吗…...

小程序富文本渲染难题如何解决?mp-html组件实战指南

小程序富文本渲染难题如何解决?mp-html组件实战指南 【免费下载链接】mp-html 小程序富文本组件,支持渲染和编辑 html,支持在微信、QQ、百度、支付宝、头条和 uni-app 平台使用 项目地址: https://gitcode.com/gh_mirrors/mp/mp-html …...

快速上手Z-Image-Turbo:5分钟教程,让你成为AI绘画高手

快速上手Z-Image-Turbo:5分钟教程,让你成为AI绘画高手 1. 为什么选择Z-Image-Turbo 在AI绘画领域,速度和质量的平衡一直是难题。传统模型往往需要20-50步推理才能生成一张像样的图片,而Z-Image-Turbo通过革命性的Turbo加速技术&…...