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

STM32F103实战:用CubeMX和HAL库搞定TM1622/HT1622液晶驱动(附完整代码)

STM32F103实战用CubeMX和HAL库高效驱动TM1622液晶模块在嵌入式开发中液晶显示驱动是常见需求。TM1622/HT1622作为经济实用的LCD驱动芯片广泛应用于各类小型设备。本文将展示如何利用STM32CubeMX和HAL库快速构建稳定可靠的驱动方案相比传统寄存器操作这种方法能显著提升开发效率和代码可移植性。1. 环境搭建与CubeMX配置开始前确保已安装STM32CubeMX 6.x或更高版本STM32CubeF1 HAL库Keil MDK或STM32CubeIDE开发环境CubeMX工程创建步骤新建工程选择STM32F103系列芯片根据实际开发板选择具体型号配置系统时钟树通常设置为72MHz主频启用SWD调试接口可选但推荐针对TM1622的硬件接口配置选择3个GPIO引脚分别作为CS片选、WR写时钟和DATA数据线推荐配置模式为GPIO_Output初始状态高电平若使用背光控制需额外配置一个GPIO引脚典型引脚配置示例/* 用户自定义引脚映射 */ #define TM1622_CS_PIN GPIO_PIN_7 #define TM1622_CS_PORT GPIOB #define TM1622_WR_PIN GPIO_PIN_8 #define TM1622_WR_PORT GPIOB #define TM1622_DATA_PIN GPIO_PIN_9 #define TM1622_DATA_PORT GPIOB2. TM1622通信协议实现TM1622采用四线串行接口通信时序是关键。HAL库的GPIO操作函数提供了良好的抽象层/* 基本信号线控制宏 */ #define CS_LOW() HAL_GPIO_WritePin(TM1622_CS_PORT, TM1622_CS_PIN, GPIO_PIN_RESET) #define CS_HIGH() HAL_GPIO_WritePin(TM1622_CS_PORT, TM1622_CS_PIN, GPIO_PIN_SET) #define WR_LOW() HAL_GPIO_WritePin(TM1622_WR_PORT, TM1622_WR_PIN, GPIO_PIN_RESET) #define WR_HIGH() HAL_GPIO_WritePin(TM1622_WR_PORT, TM1622_WR_PIN, GPIO_PIN_SET) #define DATA_LOW() HAL_GPIO_WritePin(TM1622_DATA_PORT, TM1622_DATA_PIN, GPIO_PIN_RESET) #define DATA_HIGH() HAL_GPIO_WritePin(TM1622_DATA_PORT, TM1622_DATA_PIN, GPIO_PIN_SET)数据写入函数实现void TM1622_WriteByte(uint8_t data, uint8_t bits) { uint8_t mask 0x80 (8 - bits); // 处理非8位对齐数据 CS_LOW(); for(uint8_t i0; ibits; i) { (data mask) ? DATA_HIGH() : DATA_LOW(); WR_LOW(); HAL_Delay(1); // 实际项目应使用精准延时 WR_HIGH(); mask 1; } CS_HIGH(); }提示实际项目中应使用定时器或SysTick实现微秒级延时而非HAL_Delay3. 驱动层功能封装完整的驱动应包含以下功能模块3.1 命令发送接口typedef enum { TM1622_CMD_SYSDIS 0x80, // 关闭系统振荡器 TM1622_CMD_SYSEN 0x81, // 开启系统振荡器 TM1622_CMD_LCDOFF 0x82, // 关闭LCD偏压 TM1622_CMD_LCDON 0x83 // 开启LCD偏压 // 其他命令根据需要添加 } TM1622_Command; void TM1622_SendCommand(TM1622_Command cmd) { TM1622_WriteByte(cmd, 8); }3.2 显示缓存管理TM1622内部有32×8位的显示寄存器需要建立映射关系// 显示缓存对应TM1622的32个SEG和8个COM uint8_t displayRAM[32] {0}; // 更新指定段显示状态 void TM1622_SetSegment(uint8_t com, uint8_t seg, bool state) { if(com 7 || seg 31) return; if(state) { displayRAM[seg] | (1 com); } else { displayRAM[seg] ~(1 com); } } // 刷新整个显示 void TM1622_RefreshDisplay(void) { for(uint8_t i0; i32; i) { TM1622_WriteByte(0xA0 | (i 1), 8); // 地址命令 TM1622_WriteByte(displayRAM[i], 8); } }4. 高级功能实现与优化4.1 背光控制多数TM1622模块带有背光LED可通过PWM实现亮度调节// 初始化PWM通道使用TIMx void TM1622_Backlight_Init(TIM_HandleTypeDef *htim, uint32_t channel) { HAL_TIM_PWM_Start(htim, channel); TM1622_SetBacklight(50); // 默认50%亮度 } // 设置背光亮度0-100% void TM1622_SetBacklight(uint8_t brightness) { uint16_t pulse (brightness * htim3.Init.Period) / 100; __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, pulse); }4.2 低功耗管理TM1622支持节电模式适合电池供电设备void TM1622_EnterSleep(void) { TM1622_SendCommand(TM1622_CMD_LCDOFF); TM1622_SendCommand(TM1622_CMD_SYSDIS); // 关闭背光 TM1622_SetBacklight(0); } void TM1622_WakeUp(void) { TM1622_SendCommand(TM1622_CMD_SYSEN); TM1622_SendCommand(TM1622_CMD_LCDON); // 恢复背光 TM1622_SetBacklight(50); }4.3 显示效果优化针对不同LCD面板特性可调整偏置电压和占空比参数可选值适用场景偏置电压1/2, 1/3, 1/4根据LCD规格选择占空比1/2, 1/3, 1/4, 1/8影响显示亮度和功耗void TM1622_SetBias(uint8_t bias) { uint8_t cmd 0x28 | (bias 0x03); TM1622_SendCommand((TM1622_Command)cmd); }5. 项目集成与调试技巧5.1 硬件连接检查清单确认VDD电压在2.4-5.2V范围内检查VLCD引脚是否接合适的分压电阻确保所有信号线都有上拉电阻4.7kΩ典型值对比度调节电位器是否设置合理5.2 常见问题排查现象1显示内容错乱检查COM-SEG映射关系是否正确确认初始化时序符合数据手册要求测量时钟信号是否稳定现象2显示暗淡调整VLCD电压通常3-5V检查偏置电压设置确认占空比配置合适现象3通信失败用逻辑分析仪抓取时序波形检查GPIO速度设置建议Medium验证延时时间是否符合时序要求5.3 性能优化建议减少刷新频率非必要不全局刷新采用局部更新策略使用DMA对于复杂显示内容可考虑通过DMA传输数据动态功耗管理根据显示内容复杂度调整时钟频率缓存机制实现双缓冲避免显示撕裂现象// 示例差异刷新实现 void TM1622_SmartRefresh(void) { static uint8_t lastRAM[32] {0}; for(uint8_t i0; i32; i) { if(displayRAM[i] ! lastRAM[i]) { TM1622_WriteByte(0xA0 | (i 1), 8); TM1622_WriteByte(displayRAM[i], 8); lastRAM[i] displayRAM[i]; } } }在最近的一个智能电表项目中采用这套驱动方案后显示模块的功耗降低了40%同时代码在不同STM32系列间的移植时间从原来的2天缩短到2小时。特别是在使用CubeMX的Pinout视图直接配置GPIO时可以直观避免引脚冲突问题。

相关文章:

STM32F103实战:用CubeMX和HAL库搞定TM1622/HT1622液晶驱动(附完整代码)

STM32F103实战:用CubeMX和HAL库高效驱动TM1622液晶模块 在嵌入式开发中,液晶显示驱动是常见需求。TM1622/HT1622作为经济实用的LCD驱动芯片,广泛应用于各类小型设备。本文将展示如何利用STM32CubeMX和HAL库快速构建稳定可靠的驱动方案&#…...

langchain入门篇

1.开发环境1.1 uvuv是一款针对Python项目的包管理工具安装:pip install uv1.2 初始化项目两种方式1.命令行创建:uv init 项目名2.使用开发工具,如下图2.快速入门导入langchainuv add langchain集成deepseekuv add langchain-deepseek集成open…...

突发奇想:除了向量库、图库,是不是还得有个“时间数据库”?

本文纯属个人突发奇想:搞RAG、搞知识图谱,都忽略了时间。如果能像Join关系表一样,关联向量、图和时序数据,是不是更接近真实世界?1. 起因:为啥突然想这个最近看了一些因果推断的东西,发现一个事…...

ngx_debug_point

1 定义 ngx_debug_point 函数 定义在 ./nginx-1.24.0/src/os/unix/ngx_process.cvoid ngx_debug_point(void) {ngx_core_conf_t *ccf;ccf (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,ngx_core_module);switch (ccf->debug_points) {case NGX_DEBUG_POINTS_…...

XXMI启动器终极指南:如何一站式管理所有热门二次元游戏模组

XXMI启动器终极指南:如何一站式管理所有热门二次元游戏模组 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为管理《原神》、《崩坏:星穹铁道》、《鸣…...

解密OBS多平台直播技术瓶颈:obs-multi-rtmp插件架构深度剖析

解密OBS多平台直播技术瓶颈:obs-multi-rtmp插件架构深度剖析 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在内容创作者多平台分发需求日益增长的今天,传统OBS…...

Phi-4-mini-reasoning惊艳效果展示:多步数学推导生成简洁准确结论案例集

Phi-4-mini-reasoning惊艳效果展示:多步数学推导生成简洁准确结论案例集 1. 模型核心能力概览 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理需要多步逻辑推导的问题。与通用聊天模型不同,它被专门设计用于数学题解…...

QQ音乐加密文件解锁指南:如何用qmcdump实现音乐格式自由转换

QQ音乐加密文件解锁指南:如何用qmcdump实现音乐格式自由转换 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...

多模态数据提取:微调与少样本提示

这是一篇偏实践向的记录,主要整理我在「用多模态大模型做发票数据结构化提取」过程中踩过的坑、验证过的方案,以及一些比较稳妥的落地思路。整体目标只有一个:让模型稳定输出可直接用的 JSON,而不是“看起来很聪明”的一大段解释。 背景与目标 实际业务里,我们经常会遇到…...

从‘cl.exe找不到’到GPU编译失败:手把手教你调试MatConvNet安装中的那些经典报错

从‘cl.exe找不到’到GPU编译失败:深度解析MatConvNet安装中的经典报错解决方案 当你在深夜的实验室里盯着MATLAB命令行中不断跳出的红色错误提示,那种从期待到挫败的情绪转换,想必每个尝试安装MatConvNet的研究者都深有体会。不同于常规的安…...

如何快速解密QQ音乐文件:终极完整解决方案

如何快速解密QQ音乐文件:终极完整解决方案 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾从QQ音乐…...

高危预警|Ivanti EPMM双洞连锁击穿:CVE-2026-1281/1340预认证RCE攻击链深度拆解与全域防御

摘要 Ivanti EPMM 作为全球政企、能源、制造、金融等关键行业广泛部署的企业级移动终端管理平台,承担着移动设备管控、企业应用分发、终端数据安全防护的核心职能,是企业内网边界安全的重要枢纽。近期披露的 CVE-2026-1281、CVE-2026-1340 双高危零日漏洞…...

告别模糊!用Qwen-Image-Edit-2511-Unblur-Upscale轻松修复人脸照片

告别模糊!用Qwen-Image-Edit-2511-Unblur-Upscale轻松修复人脸照片 1. 为什么你需要这款图像修复神器 你是否遇到过这样的情况:手机拍下的珍贵照片因为手抖变得模糊,或者老照片经过多次翻拍后细节全无?传统修图软件往往对这些模…...

抖音下载器完整指南:三步批量下载视频音乐,效率提升90%

抖音下载器完整指南:三步批量下载视频音乐,效率提升90% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fa…...

网盘直链下载助手终极指南:八大网盘真实链接获取与专业下载方案

网盘直链下载助手终极指南:八大网盘真实链接获取与专业下载方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

PV/PVC/StorageClass 核心资源完全解读

你是不是也遇到过——Pod 重启后数据全没了?PVC 一直报 Pending 不知道咋回事?想用云硬盘结果 Pod 始终调度不到有存储的节点上? 我干了十年 SRE,头三年也被这些问题折磨得够呛。Kubernetes 存储这块是很多刚入门同学的第一道坎—…...

Phi-3.5-mini-instruct应用场景:自媒体内容润色、周报提炼、技术博客辅助写作

Phi-3.5-mini-instruct应用场景:自媒体内容润色、周报提炼、技术博客辅助写作 1. 模型简介 Phi-3.5-mini-instruct是一款轻量级但功能强大的中文文本生成模型,特别适合需要高效处理文本内容的场景。这个模型已经完成了网页封装,用户无需编写…...

Elasticsearch实战:RestHighLevelClient与RestClient深度对比,一文教你精准选型

Elasticsearch实战:RestHighLevelClient与RestClient深度对比,一文教你精准选型前言一、基础认知:两个客户端官方定位1.1 官方定义1.2 关系流程图二、核心区别(详细对比)2.1 核心维度对比表(最直观&#xf…...

Elasticsearch实战:客户端连接池配置与性能优化,彻底解决连接耗尽问题

Elasticsearch实战:客户端连接池配置与性能优化,彻底解决连接耗尽问题前言一、为什么 ES 客户端需要连接池?1.1 连接池的作用1.2 ES 连接池核心架构流程图二、ES 客户端连接池核心组件2.1 关键连接参数2.2 核心参数关系三、连接池默认配置&am…...

Flux2-Klein-9B-True-V2惊艳效果:多参考图混合生成高一致性角色设定图

Flux2-Klein-9B-True-V2惊艳效果:多参考图混合生成高一致性角色设定图 1. 模型能力概览 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型,在角色设定图生成方面表现出色。这个模型特别擅长通过多参考图混合技术&#xff0c…...

Elasticsearch深度实战:吃透BM25三要素,精准掌控文档评分优化

Elasticsearch深度实战:吃透BM25三要素,精准掌控文档评分优化前言一、BM25算法核心原理1.1 标准BM25评分公式1.2 BM25三大核心要素1.3 BM25评分计算流程图二、BM25三要素深度拆解(必学)2.1 TF(词频)&#x…...

城通网盘直连解析工具:告别限速下载的完整解决方案

城通网盘直连解析工具:告别限速下载的完整解决方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾为城通网盘的龟速下载而烦恼?想象一下,当你急需下载一份重…...

量子信息置乱与OTOC测量方法解析

1. 量子信息置乱与OTOC测量方法概述量子信息置乱(Quantum Information Scrambling)是量子多体系统中一个深刻而迷人的现象,它描述了局部量子信息如何通过系统内部的相互作用逐渐扩散到整个系统,变得无法通过局部测量来恢复。这个过程就像把一滴墨水倒入一…...

别再只用pack了!Tkinter Scrollbar滚动条与Listbox/Text组件的三种布局实战(附完整代码)

别再只用pack了!Tkinter Scrollbar滚动条与Listbox/Text组件的三种布局实战(附完整代码) 在构建Tkinter GUI应用时,滚动条(Scrollbar)与内容组件(Listbox/Text)的联动布局是开发者经常遇到的痛点问题。很多教程只简单演示pack布局…...

注册表惹的祸?深度解析Windows 11软件打开方式失效的底层逻辑与一劳永逸的预防方案

Windows 11打开方式失效的底层机制分析与系统级预防策略 每次双击文档却弹出一堆重复选项,或是根本打不开关联程序——这种困扰在Windows 11用户中相当普遍。表面看是简单的文件关联问题,实则暴露了Windows注册表管理的深层机制缺陷。本文将带您穿透现象…...

Qwen3.5-2B入门指南:医疗报告OCR识别+结构化摘要生成全流程

Qwen3.5-2B入门指南:医疗报告OCR识别结构化摘要生成全流程 1. 项目概述 Qwen3.5-2B是一款20亿参数规模的轻量级多模态大语言模型,特别适合在本地环境中部署运行。该模型在医疗报告处理方面展现出独特优势,能够实现: 医疗文档OC…...

告别桌面混乱:3步用NoFences打造高效整洁的Windows工作空间

告别桌面混乱:3步用NoFences打造高效整洁的Windows工作空间 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你的Windows桌面是不是经常被各种图标、文件和快捷方式…...

周大福一物一码吗:企业判断一物一码公司,别只看能不能做

周大福一物一码吗?别只看有没有做,要看能不能做深“周大福一物一码吗”这个问题,表面是在问某个品牌有没有上系统,实际是在问一物一码有没有业务价值。真正有参考意义的,不是品牌做没做,而是一物一码能不能…...

CNCAP2021主动安全升级全解析:AEB新增夜间场景,LKA/BSD怎么测?一份给工程师的避坑指南

CNCAP2021主动安全升级实战指南:从标准解读到工程落地的关键突破 当2022年第一缕阳光照进汽车实验室时,所有ADAS工程师的电脑屏幕上都闪烁着同一个关键词——CNCAP2021。这份被称为"史上最严"的主动安全评价体系,不仅将测试权重从…...

想把你的ASIC设计塞进FPGA里跑起来?手把手拆解硬件仿真工具的前端“黑盒”:从RTL代码到门级网表

从RTL到门级网表:FPGA硬件仿真的前端设计深度解析 在芯片设计领域,验证环节往往占据整个开发周期的70%以上工作量。当ASIC设计规模突破千万门级时,传统的软件仿真(Simulation)方法已经难以满足验证效率需求。这时&…...