极速点亮 ST7789驱动开发:STM32硬件SPI显示方案指南
1. 核心优势解析
这款ST7789驱动库专为STM32平台设计,通过硬件SPI接口实现高效显示控制,为嵌入式开发者提供了开箱即用的显示解决方案。相比传统软件模拟SPI实现,本项目具有三大核心优势:
1.1 硬件加速的SPI通信
采用STM32硬件SPI外设(默认hspi1),数据传输速率比软件模拟提升5-10倍,特别适合高分辨率图像显示需求。通过DMA模式(默认启用)可进一步释放CPU资源,实现无阻塞数据传输。
1.2 多分辨率自适应
支持市面上主流的ST7789显示屏规格,包括:
- 240×240像素(1.3英寸)
- 135×240像素(0.96英寸)
- 170×320像素(1.9英寸) 配合4种旋转模式(0°-270°),可灵活适配不同安装方向的显示需求。
1.3 丰富的图形绘制功能
内置完整的2D图形引擎,支持像素级操作到复杂图形绘制:
- 基础图元:点、线、矩形、圆
- 文本渲染:多种字体支持(通过fonts.h定义)
- 图像显示:RGB565格式位图绘制
- 高级形状:填充矩形、三角形、圆形
2. 快速上手指南
2.1 准备工作
在开始使用前,请确保您的开发环境满足以下条件:
- STM32CubeMX或类似配置工具
- HAL库支持(需包含SPI和GPIO驱动)
- 已焊接好的ST7789显示屏模块(带SPI接口)
2.2 硬件连接说明
根据st7789.h中的默认配置,标准连接方式如下:
| 显示屏引脚 | STM32引脚 | 功能说明 |
|---|---|---|
| SCL | SPI_SCK引脚 | 时钟信号 |
| SDA | SPI_MOSI引脚 | 数据发送 |
| DC | ST7789_DC_PIN | 数据/命令选择 |
| RST | ST7789_RST_PIN | 复位信号 |
| CS | ST7789_CS_PIN | 片选信号(可选) |
| VCC | 3.3V | 电源输入 |
| GND | GND | 接地 |
⚠️ 注意:具体引脚定义需根据您的PCB设计修改st7789.h中的端口宏定义。
2.3 初始化流程
完成硬件连接后,只需三步即可点亮显示屏:
-
添加文件到工程 将ST7789目录下的st7789.c和st7789.h添加到STM32工程中,并确保fonts.h也在包含路径内。
-
配置SPI外设 通过STM32CubeMX启用SPI外设(默认hspi1),配置为:
- 全双工模式
- 8位数据长度
- 时钟极性(CPOL)= 0
- 时钟相位(CPHA)= 0
- 波特率分频根据显示屏规格调整(建议不超过18MHz)
-
调用初始化函数 在main.c中添加初始化代码:
#include "st7789.h" int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); ST7789_Init(); // 初始化显示屏 ST7789_Fill_Color(WHITE); // 清屏为白色 while (1) { // 应用代码 } }
2.4 功能验证
初始化完成后,可调用内置测试函数验证显示功能:
ST7789_Test(); // 运行内置测试,显示基本图形和文本
成功运行后,屏幕将依次显示彩色填充区域、几何图形和测试文本,验证各绘图功能是否正常工作。
3. 深度定制技巧
3.1 分辨率与旋转配置
根据您使用的显示屏型号,在st7789.h中修改以下宏定义:
// 选择显示屏分辨率
#define USING_240X240 // 240×240像素
// #define USING_135X240 // 135×240像素
// #define USING_170X320 // 170×320像素
// 设置显示旋转角度
#define ST7789_ROTATION 2 // 2表示180°旋转(240×240默认值)
不同分辨率对应的偏移参数(X_SHIFT/Y_SHIFT)已在头文件中预设,用户无需手动计算。
3.2 性能优化选项
通过以下配置可平衡显示效果与系统资源占用:
DMA传输控制
默认启用DMA加速数据传输,如需禁用可注释此行:
// #define USE_DMA // 注释此行禁用DMA模式
颜色模式选择
支持16位(RGB565)和18位(RGB666)两种颜色模式,默认使用16位模式:
#define ST7789_COLOR_MODE_16bit 0x55 // 默认16位色
// #define ST7789_COLOR_MODE_18bit 0x66 // 18位色模式
3.3 高级绘图示例
以下是几个常用绘图功能的使用示例:
绘制彩色文本
// 在(20,30)位置绘制红色文本,蓝色背景
ST7789_WriteString(20, 30, "Hello ST7789", Font_11x18, RED, BLUE);
绘制填充图形
// 绘制蓝色填充矩形
ST7789_DrawFilledRectangle(50, 50, 100, 80, BLUE);
// 绘制黄色填充圆形
ST7789_DrawFilledCircle(120, 120, 30, YELLOW);
图1: DMA模式下的快速区域填充效果(左为普通填充,右为DMA填充)
4. 常见问题解决
4.1 显示屏无响应
- 检查SPI引脚连接是否正确,特别是SCK和MOSI信号线
- 确认RST引脚复位时序是否正常(初始化时应有低电平脉冲)
- 验证SPI时钟频率是否在显示屏支持范围内(通常最高20MHz)
4.2 显示错位或花屏
- 检查分辨率配置是否与实际屏幕匹配
- 调整ST7789_ROTATION参数,尝试不同旋转模式
- 确认X_SHIFT和Y_SHIFT偏移值是否正确(不同分辨率有不同预设值)
4.3 文本显示乱码
- 确保fonts.h文件已正确包含到工程中
- 检查使用的字体是否在fonts.c中有定义实现
- 尝试使用不同字号的字体(如Font_7x10、Font_16x26等)
4.4 DMA模式下数据错误
- 确认DMA通道配置是否正确,是否与SPI外设匹配
- 检查DMA缓冲区大小是否足够(特别是大图像传输时)
- 尝试降低SPI时钟频率或禁用DMA模式排查问题
5. 功能扩展建议
5.1 自定义字体添加
如需使用项目外的字体,可按以下步骤扩展:
- 在fonts.h中定义新的FontDef结构体
- 在fonts.c中添加字体点阵数据
- 调用ST7789_WriteString时指定新字体
5.2 图像显示优化
对于较大的位图显示,建议:
- 使用图像转换工具将图片转为RGB565格式数组
- 通过DMA模式传输图像数据(启用USE_DMA宏)
- 实现图像分块传输,避免占用过多RAM
通过本指南,您已掌握ST7789驱动库的核心使用方法和优化技巧。无论是开发智能手表、小型仪器面板还是便携式测试设备,这款驱动库都能为您提供高效可靠的显示解决方案。如需进一步扩展功能,可参考st7789.c中的函数实现,或在社区寻求支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




