1. 硬件连接与初始化配置
拿到HK32F030M开发板和ST7567液晶模块后,第一步就是正确连接硬件。我刚开始玩嵌入式时,最头疼的就是引脚连接问题,经常因为接错线导致屏幕不亮。这里分享几个容易踩坑的点:
ST7567通常需要5个控制引脚:SCL(时钟)、SDA(数据)、CS(片选)、RS(数据/命令选择)和RST(复位)。根据代码中的宏定义,我们的连接方案是:
- SCL接PA2(GPIOA第2脚)
- SDA接PC6(GPIOC第6脚)
- CS接PA3
- RS接PC3
- RST接PB4
实际接线时建议用不同颜色的杜邦线区分功能,我用红色接电源、黑色接地、黄色接时钟线、绿色接数据线,这样排查问题时一目了然。特别注意ST7567的工作电压是3.3V,直接接5V可能会烧毁芯片!
硬件连接好后,在代码中需要先初始化GPIO。LcdIoInit()函数里做了三件事:
- 开启GPIO时钟(AHB总线)
- 配置引脚为推挽输出模式
- 设置默认输出电平
这里有个小技巧:如果屏幕出现乱码,可以先用万用表测量各引脚电压。正常工作时,CS信号应该会有高低电平变化,SCL引脚应该能看到规律的脉冲信号。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SPI时序模拟与数据写入
ST7567支持4线SPI通信,但HK32F030M的硬件SPI可能被其他外设占用,所以我们用GPIO模拟时序。LcdWrite()函数实现了这个关键功能:
c复制static void LcdWrite(uint8_t iscmd, uint8_t data) {
uint8_t i;
LCD_PIN_OUT(CS,0); // 片选使能
LCD_PIN_OUT(RS,iscmd); // 设置命令/数据模式
// 逐位发送数据
for(i=0;i<8;i++) {
LCD_PIN_OUT(SDA, data&0x80); // 取最高位
LCD_PIN_OUT(SCL,0); // 时钟下降沿
DelayUs(10); // 保持时间
LCD_PIN_OUT(SCL,1); // 时钟上升沿
DelayUs(10);
data=dat
