1.透過STM32CubeMX取得STemWin Library

開啟[STM32CubeMX] -> 點選右上方選項[Help] -> 選擇[Updater Setting]

image

取得Repository路徑

image

Libary存放於目錄下 "Repository\STM32Cube_FW_H7_V1.11.0\Middlewares\ST"

image

複製將STemWin資料夾到專案目錄下(同cubeIDE的cproject檔案的目錄)

下面emWin為改名後, 可不改名.

image

 

2. 刪除多於檔案

emWin只保留4個資料夾, 其餘資料夾使用不到.

image

OS資料夾只保留檔案GUI_X.c

image

 

Config資料夾刪除LCDConf_Lin_Template.c與.h兩個檔案

image

GUIDRV_Template: 大部分顯示器都能驅動(保留檔案但未使用,LTDC應可使用此種)

LCDConf_FlexColor_Template: Library內建驅動, 只需增加寫命令與寫資料兩個函式.

LCDConf_Lin_Template: 透過顯存驅動(如STM32H7內建的LCD驅動使用LTDC)

 

3. 將LCDConf_FlexColor_Template.h變更名稱為LCDConf.h

 

4. 引用Library

執行cubeIDE,於專案名稱點選右鍵,點選[Properties]

依序選擇[C/C++ Builder]->[Settings]->[MCU G++ Linker] -> [Libraries]

Libraries新增":STemWin_CM7_wc16_ARGB.a"

Library search path新增:"${workspace_loc:/${ProjName}/emWin/Lib}"

image

 

5. 將emWin加入Source Location

image

6. 依提示增加Include

此處增加emWin/Config與emWin/inc

image

 

修改Config資料夾內的檔案

7. 修改GUIConfig.c

#define GUI_NUMBYTES  50*1024 //記憶體空間

 

8.修改GUIDRV_Template.c

這裡是設置你要使用自己的LCD API

設置LCD的pixel函式, 在static void _SetPixelIndex函式內新增

ILI9488_Draw_Pixel(x,y,PixelIndex)

image

在static unsigned int _GetPixelIndex函式內新增讀取

 

9.修改LCDConf_FlexColor_Template.c

修改void LCD_X_Config(void)

兩種驅動方式選一種

a.使用內建 pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M888, 0, 0); 

需再額外增加LCD寫cmd與寫data

 

需修改為U8

static void LcdWriteReg(U8 Data) {
    ILI9341_Write_Command(Data);
}

static void LcdWriteData(U8 Data) {
  // ... TBD by user
    ILI9341_Write_Data(Data);
}

static void LcdWriteDataMultiple(U8 * pData, int NumItems) {
  while (NumItems--) {
      ILI9341_Write_Data(*pData++);
  }
}

static void LcdReadDataMultiple(U8 * pData, int NumItems) {
  while (NumItems--) {
    // ... TBD by user
  }
}

b.使用自定義(自己的LCD驅動方式)

pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_TEMPLATE, GUICC_565, 0, 0); //使用自定義

使用自定義調用GUIDRV_Template.c內的draw pixel等,若只修改set pixel,畫線與方塊都會透過set pixel一點一點繪製,所以速度上會很慢,需再針對_FillRect修改成driver的fill rect。

image

image

image

-----------------------------------------------------------------------------------------------------

GUI_DEVICE_CreateAndLink設定參考 STemWin544.pdf

選擇GUICC_M888主要是ILI9488 SPI只支援8bit與18bit, 所以必需使用24bit.

image

image

 

11. 修改stm32h7xx_it.c

需要在void SysTick_Handler(void)添加OS_TimeMS累加,否則會造成GUI_Delay時進入無限迴圈。

/* USER CODE BEGIN Includes */
#include "GUI.h" 
extern volatile GUI_TIMER_TIME OS_TimeMS; 

image

下面補充是說明GUI_Delay是透過OS_TimeMS計時

image

 

 

12. 透過GUIBuilder創建GUI

開啟執行檔STM32Cube_FW_H7_V1.11.0\Middlewares\ST\STemWin\Software\GUIBuilder.exe

編輯好GUI存在,在同層資料夾會產生一個檔案FramewinDLG.c。

image

將這個檔複製到你專案的資料夾,本文是放置在自建LCD Driver的資料夾,接著在這個資料夾include path "emWin/inc"與"emWin/Config"。

image

image

將原本在freertos.c生成的task移至FramewinDLG.c的最底部,然後新增初始化。

新增下面這兩行
      WM_MULTIBUF_Enable(1);
      CreateFramewin();

image

這個task是在cubeMX自行新增命名為lcdDisplay

image

 

CRC需要勾選,否則在GUI_Init()時不會進行初始化,會在這邊卡住無法繼續執行。

image

 

 

https://blog.csdn.net/z1349548996/article/details/125100646

https://blog.csdn.net/phenixyf/article/details/83788315

https://blog.csdn.net/m0_52153876/article/details/124465576

https://blog.csdn.net/sudaroot/article/details/108358545

https://blog.csdn.net/cp_srd/article/details/104279981

 

arrow
arrow
    全站熱搜

    門外漢 發表在 痞客邦 留言(0) 人氣()