1. 项目概述
在嵌入式开发中,数码管显示是最基础也最实用的功能之一。这次我要分享的是一个基于STM32和74HC595芯片驱动4位共阳极数码管的完整解决方案。不同于简单的静态显示,这个方案实现了两个关键功能:定时器中断刷新和字符串动态显示。
这个方案特别适合需要节省IO口资源的中小型项目。通过74HC595这种串行输入/并行输出的移位寄存器,我们仅用3个IO口就控制了4位数码管的所有段选和位选信号。定时器中断的引入则彻底解决了数码管刷新导致的CPU占用问题,让主程序可以专注处理其他任务。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计解析
2.1 核心器件选型
STM32F103C8T6作为主控,这款Cortex-M3内核的MCU性价比极高,内置硬件定时器正好满足我们的需求。74HC595是方案的关键,每片595可以扩展8个输出口,我们只需要:
- 1片595控制段选(a-g+dp)
- 1片595控制位选(4位数码管)
共阳极数码管选择0.56英寸的通用型号,工作电压2V,每段电流约10mA。特别注意要加装限流电阻,我通常使用220Ω的贴片电阻排,既节省空间又保证亮度均匀。
2.2 电路连接细节
硬件连接有三个要点:
- 级联方式:两个595的Q7'接下一片的SER,形成16位移位寄存器链
- 控制信号:STM32只需连接DS(数据)、SHCP(时钟)、STCP(锁存)三线
- 驱动电路:位选端需要增加PNP三极管(如8550)作电流放大
重要提示:共阳极数码管的公共端接VCC,段选端低电平点亮。实际接线时建议用万用表二极管档先确认各引脚对应关系,不同厂家的引脚定义可能有差异。
3. 软件实现详解
3.1 定时器配置
使用TIM2作为刷新定时器,关键配置参数:
c复制// 时钟72MHz,预分频72-1,计数周期100-1
// 产生10kHz中断频率(每0.1ms中断一次)
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_InitStruct.TIM_Period = 100-1;
TIM_InitStruct.TIM_Prescaler = 72-1;
TIM_InitStruct.TIM_CounterMode = TIM
