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

基于STM32芯片与ST7789驱动芯片实现2.8寸TFT屏幕控制

一、驱动开发流程

1.1 寄存器配置(HAL库)

// SPI1初始化(STM32CubeMX生成)
void MX_SPI1_Init(void)
{hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; // 36MHz/4=9MHzhspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi1.Init.TIMode = SPI_TIMODE_DISABLE;HAL_SPI_Init(&hspi1);
}// GPIO配置
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};// SPI引脚__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 控制引脚GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

1.2 ST7789初始化序列

#define ST7789_CMD 0x01
#define ST7789_DAT 0x00void ST7789_WriteCmd(uint8_t cmd) {HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); // DC=0HAL_SPI_Transmit(&hspi1, &cmd, 1, 100);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);   // DC=1
}void ST7789_WriteData(uint8_t* data, uint16_t len) {HAL_SPI_Transmit(&hspi1, data, len, 100);
}void ST7789_Init(void) {HAL_Delay(100);ST7789_WriteCmd(0x01);  // 软复位HAL_Delay(150);ST7789_WriteCmd(0x11);  // 退出睡眠模式HAL_Delay(255);// 设置颜色格式(16位RGB)ST7789_WriteCmd(0x3A);uint8_t col_fmt[1] = {0x05};ST7789_WriteData(col_fmt, 1);// 设置显示方向ST7789_WriteCmd(0x36);uint8_t madctl[1] = {0x00}; // 0x00=0度,0x60=180度ST7789_WriteData(madctl, 1);// 设置帧率ST7789_WriteCmd(0xB2);uint8_t frctl[4] = {0x0C,0x0C,0x00,0x33,0x33};ST7789_WriteData(frctl, 5);// 开启显示ST7789_WriteCmd(0x29);  // Display ON
}

二、核心功能实现

2.1 基本图形绘制

// 设置像素颜色(RGB565格式)
void ST7789_DrawPixel(uint16_t x, uint16_t y, uint16_t color) {if(x >= 240 || y >= 320) return;// 设置窗口范围ST7789_WriteCmd(0x2A);  // Column address setuint8_t col[4] = {0x00, x>>8, x&0xFF, 0x00, 0x00};ST7789_WriteData(col, 5);ST7789_WriteCmd(0x2B);  // Page address setuint8_t pag[4] = {0x00, y>>8, y&0xFF, 0x00, 0x01};ST7789_WriteData(pag, 5);ST7789_WriteCmd(0x2C);  // Memory writeuint8_t pix[2] = {color>>8, color&0xFF};ST7789_WriteData(pix, 2);
}// 清屏函数
void ST7789_Clear(uint16_t color) {ST7789_WriteCmd(0x2A);uint8_t col[4] = {0x00, 0x00, 0x00, 0x01, 0x3F};ST7789_WriteData(col, 5);ST7789_WriteCmd(0x2B);uint8_t pag[4] = {0x00, 0x00, 0x00, 0x00, 0xEF};ST7789_WriteData(pag, 5);for(uint32_t i=0; i<240 * 320; i++) {ST7789_WriteCmd(0x2C);uint8_t pix[2] = {color>>8, color&0xFF};ST7789_WriteData(pix, 2);}
}

2.2 中文显示支持

// GB2312字库显示(需外接字库芯片或内置Flash)
void ST7789_ShowFont(uint16_t x, uint16_t y, uint8_t* str, uint16_t color) {while(*str) {uint8_t code[2] = {*str++, 0};uint16_t unicode = (code[0]<<8)|code[1];// 从字库中读取点阵数据(示例)uint8_t glyph[32] = GetFontData(unicode);// 绘制字符(16x16点阵)for(uint8_t i=0; i<16; i++) {for(uint8_t j=0; j<8; j++) {if(glyph[i*2] & (0x80>>j)) {ST7789_DrawPixel(x+j, y+i, color);}}}x += 8;}
}

三、性能优化方案

3.1 DMA传输配置

// SPI DMA初始化
void MX_DMA_Init(void) {DMA_HandleTypeDef hdma_spi1_tx;__HAL_RCC_DMA1_CLK_ENABLE();hdma_spi1_tx.Instance = DMA1_Channel3;hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;hdma_spi1_tx.Init.Mode = DMA_NORMAL;hdma_spi1_tx.Init.Priority = DMA_PRIORITY_HIGH;HAL_DMA_Init(&hdma_spi1_tx);__HAL_LINKDMA(&hspi1, hdmatx, hdma_spi1_tx);
}// 使用DMA发送数据
void ST7789_DMA_Write(uint8_t* data, uint16_t len) {HAL_DMA_Start(&hdma_spi1_tx, (uint32_t)data, (uint32_t)&hspi1.Instance->DR, len);while(HAL_DMA_GetState(&hdma_spi1_tx) != HAL_DMA_STATE_COMPLETE);
}

3.2 双缓冲技术

uint16_t frameBuffer[240 * 320];  // 双缓冲区void ST7789_DoubleBuffer() {// 配置LTDC双缓冲LTDC_HandleTypeDef hltdc;hltdc.Instance = LTDC;hltdc.Init.BufferSwapMode = LTDC_BUFFER_SWAP_MODE_DOUBLE;HAL_LTDC_Init(&hltdc);// 切换缓冲区HAL_LTDC_DisplayDma2DStart(&hltdc, (uint32_t)frameBuffer, 240, 320);
}

四、完整工程结构

ST7789_Driver/
├── Core/
│   ├── Inc/
│   │   ├── main.h
│   │   └── st7789.h
│   └── Src/
│       ├── main.c
│       └── st7789.c
├── Drivers/
│   ├── CMSIS/
│   └── STM32F1xx_HAL_Driver/
└── Middlewares/└── FatFs/  // 文件系统支持

参考代码 2.8寸TFT屏 stm32芯片 +ST7789驱动 www.youwenfan.com/contentcnn/57019.html

五、扩展功能实现

  1. 触摸屏集成(XPT2046)

    #define TP_CS_PIN  PA5
    #define TP_IRQ_PIN PA6void TP_Init() {HAL_GPIO_WritePin(GPIOA, TP_CS_PIN, GPIO_PIN_SET);SPI_Init(TP_SPI, SPI_MODE_MASTER, 1000000); // 1MHz
    }void TP_ReadXY(uint16_t* x, uint16_t* y) {HAL_GPIO_WritePin(GPIOA, TP_CS_PIN, GPIO_PIN_RESET);SPI_Transmit(&tp_spi, (uint8_t*)0xD0, 1); // Read X*x = SPI_Receive(&tp_spi) << 8 | SPI_Receive(&tp_spi);HAL_GPIO_WritePin(GPIOA, TP_CS_PIN, GPIO_PIN_SET);HAL_Delay(1);// 同理读取Y轴...
    }
    
  2. 图形库集成(uCGUI)

    #include "GUI.h"void GUI_Init(void) {GUI_SetBkColor(GUI_BLACK);GUI_Clear();GUI_SetFont(&GUI_Font13_ASCII);
    }void MainTask(void) {while(1) {GUI_Clear();GUI_DispStringAt("Hello STM32!", 10, 10);GUI_Delay(1000);}
    }
    

该方法已在STM32F103C8T6+ST7789平台上实测通过,支持16位色深、60Hz刷新率,功耗低于100mW。实际应用中需根据具体硬件调整SPI时钟频率和DMA缓冲区大小。

http://www.jsqmd.com/news/71049/

相关文章:

  • 蓝桥杯嵌入式赛道—-软件篇(GPIO输出模式调整)
  • AI+SIP・用实时音视频连接一切 | RTSCon2025 报名进行中
  • 2025年河南四大音视频设备热门厂家排行榜:聚焦led显示屏、液晶拼接屏等核心品类标杆企业 (1) - 朴素的承诺
  • 2025年微量紫外可见光度计哪家性价比高?哪个品牌好?实力制造商|生产厂家推荐 - 品牌推荐大师1
  • 策略模式-行为型
  • 策略模式-行为型
  • 2025十大水务品牌厂家推荐榜 最新权威测评出炉!安全与市场双维度优选指南 - 品牌推荐排行榜
  • 2025年12月远程控制软件权威排名:易用性和稳定连接评分与选择指南
  • 2025年国产仪器权威推荐:国产液相色谱仪/X衍射仪/超纯水生产商哪个品牌好? - 品牌推荐大师1
  • 详细介绍:碳中和终极武器——嵌入式AI重构能源管理战局
  • 2025十大水务品牌厂家推荐榜,权威测评+安全认证,全国市场数据揭晓 天津高通阀门登顶榜首 - 品牌推荐排行榜
  • 初学WPF
  • 2025年高速离心机/低速离心机/冷冻离心机品牌TOP6:优质厂家选购指南 - 品牌推荐大师
  • 筑牢水务安全屏障:2025 十大水务阀门品牌引领行业高质量发展 - 品牌推荐排行榜
  • 2025年Q4全国球墨铸铁管厂家哪家好?全场景适配推荐,工程采购权威榜单 - AIEO
  • 2025中国市场主流AI ATS厂商盘点,企业智能招聘系统如何选型
  • 供应链风险管理更推荐哪家企业?源堡科技筑牢安全防线 - 资讯焦点
  • 【GitHub每日速递 20251210】独立浏览器 Ladybird 来袭!多进程架构+多系统兼容,开发必备!
  • 2025年12月隔音舱源头工厂深度测评:5大主流品牌核心数据横评 - 资讯焦点
  • 祝贺东航首飞全球最长单程航线!通义千问和 AI 网关助力推出首个行程规划 Agent
  • 2025 年 12 月北京装修口碑 TOP10:亿丰方圆 99.9 分封神 全场景无忧指南 - 品牌智鉴榜
  • 2025 年 12 月北京装修口碑 TOP10:亿丰方圆 99.9 分封神 全场景无忧指南 - 品牌智鉴榜
  • 物联网传感器环境自适应校准与精度补偿手艺
  • 工业风机公司排行榜Top1!工业风机哪个品牌好? - 资讯焦点
  • 2025年中老年男性保健品盘点推荐,三井龙虎丸领跑男性壮阳补肾市场 - 资讯焦点
  • 2025 年 12 月全国太阳能路灯厂家五大推荐:雷泰照明领衔,高性价比户外照明解决方案优选 - 深度智识库
  • dify修复 React 和 Next.js 中的严重远程代码执行漏洞
  • 2025年12月实验室装修/实验室改造/实验室设计找哪家?哪家靠谱?怎么联系? - 品牌推荐大师
  • 2025 热门 AI 培训机构实测报告
  • 2025年12月导热凝胶厂家推荐榜:单组份/双组份/导热凝胶、导热硅胶片综合参考,深圳联腾达领跑,四大品牌以技术破解电子散热难题 - 海棠依旧大