STM32H7+ST7735+STEMWIN移植過程分享

1. 簡介

最近搞了一塊STM32H743的開發板,自帶TFT-1.8寸的液晶屏,一直聽說STemWin功能強大,想要體驗一把。奈何從未移植過STemWin,下意識的感覺還是有點困難,尤其是在網上找了一番關於STemWin的移植教程之後,發現給小白看的教程實在太少,SPI接口的教程更少。因此將自己移植STemWin的過程分享出來,供大夥參考一下。

2.環境

硬件

MCU信息:STM32H743
TFT屏幕信息:TFT-1.8寸液晶屏(分辨率:160xRGBx128;驅動IC:ST7735S;通訊接口:SPI)

軟件

HAL庫信息:STM32Cube_FW_H7_V1.6.0(在使用STM32CubeMX生成STM32H7工程時會提示下載,目錄在:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0)
STemWin信息:下載完上述的HAL庫之後,STemWin也已經下載OK,具體位置如下:C:\Users$username$\STM32Cube\Repository\STM32Cube_FW_H7_V1.6.0\Middlewares\ST
在這裏插入圖片描述

3.移植

3.1 移植前準備

開發板提供了TFT-1.8寸LCD的SPI驅動Demo,屏幕可以正常使用,我是基於該工程進行的移植。重點關注Demo中的以下幾個函數,函數名可能跟我提供的有所出入,具體視自己的LCD驅動代碼而定。

  • LCD_Init(void) --------------------------- SPI驅動代碼,以及LCD的初始化
  • LCD_WriteCmd(uint8_t cmd)---------LCD寫命令
  • LCD_WriteData(uint8_t data)---------LCD寫數據
    工程目錄中,如果有lcd.c,lcd.h,gui.c,gui.h,請先將文件重命名,並更改工程文件,並保證編譯之後運行依然OK。

3.2 開始移植

將整個STemWin目錄拷貝到工程目錄下:
在這裏插入圖片描述

打開LCD Demo的工程文件,將STemWin下必要的文件添加進工程,具體文件以及路徑如下:

  • STemWin/Config/GUIConf.c
  • STemWin/Config/GUIConf.h
  • STemWin/Config/GUIDRV_Template.c
  • STemWin/Config/LCDConf_FlexColor_Template.c
  • STemWin/Lib/STemWin_CM7_wc16_ARGB.a
  • STemWin/OS/GUI_X.c

添加完成之後,工程目錄結構中如下:
在這裏插入圖片描述

將STemWin_CM7_wc16_ARGB.a設置爲庫文件,具體配置方法如下:
在這裏插入圖片描述

修改工程的頭文件包含路徑,增加以下幾個路徑:
在這裏插入圖片描述

3.3 修改代碼

3.3.1 修改LCDConf_FlexColor_Template.c

找到XSIZE_PHYS和YSIZE_PHYS,並修改爲實際LCD的分辨率在這裏插入圖片描述
修改LCD_X_Config(void),具體修改爲
在這裏插入圖片描述
修改LCD_X_DisplayDriver(void),加入我們自己的LCD屏的初始化函數。
在這裏插入圖片描述
修改一下幾個函數,該方法根據具體使用的LCD確定,本例程使用的是SPI通訊的LCD屏幕,指令和數據均爲 8 bit

  • LcdWriteReg(U16 Data) —> LcdWriteReg(U8 Data)
  • LcdWriteData(U16 Data) —> LcdWriteData(U8 Data)
  • LcdWriteDataMultiple(U16 * pData, int NumItems) —> LcdWriteDataMultiple(U8 * pData, int NumItems)

在這裏插入圖片描述

3.3.2 修改GUIDRV_Template.c

找到 ,加入LCD的畫點函數,該函數由LCD驅動 Demo提供,需要根據自己的LCD驅動代碼來進行添加。
在這裏插入圖片描述

3.3.3 修改GUConf.c

修改GUI使用的SDRam大小
在這裏插入圖片描述

3.3.4 新建一個空文件 LCDConf.h

在這裏插入圖片描述

3.3.5 由於採用的是RGB格式的LCD屏,因此需要修改GUI_ConfDefaults.h,否則可能會以BGR的方式顯示。

在這裏插入圖片描述

3.3.6 修改stm32h7xx_it.c中的SysTick_Handler函數,加入一下代碼,由於GUI_Delay會使用到OS_TimeMS,因此如果不加該段代碼,GUI_Delay將無限延時

在這裏插入圖片描述

4 驗證

在main方法中,包含頭文件GUI.h,並加入測試代碼
在這裏插入圖片描述
實際顯示效果:
在這裏插入圖片描述

5 總結

對於一名沒有用過STemWin的小白來說,移植還算順利,比想象中的要Easy一些,中途參考了各方教程,並結合自己的理解,完成了這一次移植。本次移植採用的是GUIDRV_Template_API的方式,後來也有使用GUIDRV_FLEXCOLOR的方式移植了一下,這個後續有空再補。