1. 项目背景与硬件选型考量
在嵌入式开发领域,液晶屏驱动一直是硬件工程师的必修课。最近我在一个工业控制项目中遇到了一个典型需求:需要在STM32平台上驱动一款128×64分辨率的CH12864B液晶屏。这款屏采用的是ST7920控制器,市面上虽然有不少相关资料,但真正能跑通并行模式的完整方案并不多见。
选择CH12864B这款屏有几个现实考虑:首先它的价格非常亲民(批量采购约15元/片),其次它支持3.3V供电与STM32完美匹配,最重要的是它同时支持并行8位和串行SPI两种接口模式。在工业环境下,并行接口的抗干扰能力明显优于串行方式,这也是我最终选择并行驱动方案的关键原因。
ST7920控制器虽然"年纪"不小(问世已超过15年),但其稳定的性能和丰富的内置字库(支持GB2312简体中文字符集)使其在中文显示场景中依然占据重要地位。实测发现,在-20℃~70℃的工作温度范围内,显示效果依然稳定,这对大多数工业场景已经足够。
2. 硬件连接与引脚配置
2.1 接口定义解析
CH12864B的44引脚封装看起来有些吓人,但实际并行模式只用到了其中20个引脚。最关键的是8位数据线(DB0-DB7)和3根控制线:
- RS(寄存器选择):高电平选数据寄存器,低电平选指令寄存器
- RW(读写选择):高电平读操作,低电平写操作
- E(使能信号):下降沿触发数据锁存
在STM32F103C8T6上,我将数据端口配置在GPIOB组的PB0-PB7,这样正好对应一个完整的8位端口。控制线则分配在PA组:
c复制#define LCD_RS_PIN GPIO_Pin_4 // PA4
#define LCD_RW_PIN GPIO_Pin_5 // PA5
#define LCD_E_PIN GPIO_Pin_6 // PA6
2.2 电平转换的坑
这里有个容易忽略的细节:虽然STM32和LCD都标称3.3V工作电压,但实测发现ST7920控制器对高电平的识别阈值偏高(约2.8V)。当环境温度升高时,STM32的IO输出电平会略有下降,可能导致通信失败。我的解决方案是在数据线上增加74HC245电平缓冲器,这个小改动让系统在高温下的稳定性提升了80%。
重要提示:千万不要省略PSB引脚的10K上拉
