TFT 彩屏 GUI 开发

张开发
2026/4/21 2:45:18 15 分钟阅读

分享文章

TFT 彩屏 GUI 开发
针对 TFT 彩屏 GUI 开发最稳妥的方案是 “底层驱动 中间件 应用 API” 三层结构。一、推荐方案组合方案适用 MCURAM 需求效果LVGL 屏驱F4 / G4 / H7≥ 16KB手机级 UISTemWinSTM32 全系≥ 8KB工业稳定TFT_eSPIESP32 / ESP8266低快速原型自制 GUI51 / F103极低简单按钮建议STM32F407 及以上直接用LVGLF103 用STemWin或精简版 LVGL。二、底层驱动源码以 ILI9341 为例1、 硬件接口定义SPI#defineTFT_CS_PINGPIO_PIN_4#defineTFT_DC_PINGPIO_PIN_5#defineTFT_RST_PINGPIO_PIN_6#defineTFT_PORTGPIOA2、 写命令 / 写数据底层核心voidTFT_WriteCmd(uint8_tcmd){HAL_GPIO_WritePin(TFT_DC_PORT,TFT_DC_PIN,GPIO_PIN_RESET);HAL_GPIO_WritePin(TFT_CS_PORT,TFT_CS_PIN,GPIO_PIN_RESET);HAL_SPI_Transmit(hspi1,cmd,1,10);HAL_GPIO_WritePin(TFT_CS_PORT,TFT_CS_PIN,GPIO_PIN_SET);}voidTFT_WriteData(uint8_tdat){HAL_GPIO_WritePin(TFT_DC_PORT,TFT_DC_PIN,GPIO_PIN_SET);HAL_GPIO_WritePin(TFT_CS_PORT,TFT_CS_PIN,GPIO_PIN_RESET);HAL_SPI_Transmit(hspi1,dat,1,10);HAL_GPIO_WritePin(TFT_CS_PORT,TFT_CS_PIN,GPIO_PIN_SET);}3、 设置显示窗口GUI 必用voidTFT_SetWindow(uint16_tx0,uint16_ty0,uint16_tx1,uint16_ty1){TFT_WriteCmd(0x2A);// Column Address SetTFT_WriteData(x08);TFT_WriteData(x00xFF);TFT_WriteData(x18);TFT_WriteData(x10xFF);TFT_WriteCmd(0x2B);// Page Address SetTFT_WriteData(y08);TFT_WriteData(y00xFF);TFT_WriteData(y18);TFT_WriteData(y10xFF);TFT_WriteCmd(0x2C);// Memory Write}4、 画点 / 填充GUI 基础函数voidTFT_DrawPixel(uint16_tx,uint16_ty,uint16_tcolor){TFT_SetWindow(x,y,x,y);TFT_WriteData(color8);TFT_WriteData(color0xFF);}voidTFT_Fill(uint16_tx0,uint16_ty0,uint16_tx1,uint16_ty1,uint16_tcolor){uint32_ti,total(x1-x01)*(y1-y01);TFT_SetWindow(x0,y0,x1,y1);for(i0;itotal;i){TFT_WriteData(color8);TFT_WriteData(color0xFF);}}三、GUI 基础函数自建简易 UI1、 画矩形 / 按钮voidGUI_DrawButton(uint16_tx,uint16_ty,uint16_tw,uint16_th,uint16_tcolor){TFT_Fill(x,y,xw-1,yh-1,color);}2、 显示字符ASCII 8x16voidGUI_DrawChar(uint16_tx,uint16_ty,uint8_tchr,uint16_tcolor){uint8_ti,j;uint8_ttemp;for(i0;i16;i){tempascii_8x16[chr*16i];for(j0;j8;j){if(temp(0x80j))TFT_DrawPixel(xj,yi,color);}}}3、 触摸校准XPT2046typedefstruct{uint16_tx;uint16_ty;}TouchPoint;TouchPointTP_GetPoint(void){TouchPoint p;p.xXPT2046_Read(XP);p.yXPT2046_Read(YP);returnp;}四、LVGL 移植核心代码工业级 GUI 1、 显示刷新回调voidmy_flush(lv_disp_drv_t*disp,constlv_area_t*area,lv_color_t*color_p){TFT_SetWindow(area-x1,area-y1,area-x2,area-y2);uint32_tsize(area-x2-area-x11)*(area-y2-area-y11);HAL_SPI_Transmit(hspi1,(uint8_t*)color_p,size*2,100);lv_disp_flush_ready(disp);}2、 心跳节拍1msvoidHAL_SYSTICK_Callback(void){lv_tick_inc(1);}参考代码 TFT彩屏GUI函数和驱动源码www.youwenfan.com/contentcst/182151.html五、常用颜色定义#defineRED0xF800#defineGREEN0x07E0#defineBLUE0x001F#defineWHITE0xFFFF#defineBLACK0x0000#defineYELLOW0xFFE0六、调试与性能优化问题解决花屏检查 SPI 速率≤ 40MHz刷屏慢开启 DMA触摸不准四点校准内存不足减少 LVGL 缓冲区性能提升技巧使用DMA SPI双缓冲机制局部刷新Partial Update

更多文章