1.透過STM32CubeMX取得STemWin Library
開啟[STM32CubeMX] -> 點選右上方選項[Help] -> 選擇[Updater Setting]
取得Repository路徑
Libary存放於目錄下 "Repository\STM32Cube_FW_H7_V1.11.0\Middlewares\ST"
複製將STemWin資料夾到專案目錄下(同cubeIDE的cproject檔案的目錄)
下面emWin為改名後, 可不改名.
2. 刪除多於檔案
emWin只保留4個資料夾, 其餘資料夾使用不到.
OS資料夾只保留檔案GUI_X.c
Config資料夾刪除LCDConf_Lin_Template.c與.h兩個檔案
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}"
5. 將emWin加入Source Location
6. 依提示增加Include
此處增加emWin/Config與emWin/inc
修改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)
在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。
-----------------------------------------------------------------------------------------------------
GUI_DEVICE_CreateAndLink設定參考 STemWin544.pdf
選擇GUICC_M888主要是ILI9488 SPI只支援8bit與18bit, 所以必需使用24bit.
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;
下面補充是說明GUI_Delay是透過OS_TimeMS計時
12. 透過GUIBuilder創建GUI
開啟執行檔STM32Cube_FW_H7_V1.11.0\Middlewares\ST\STemWin\Software\GUIBuilder.exe
編輯好GUI存在,在同層資料夾會產生一個檔案FramewinDLG.c。
將這個檔複製到你專案的資料夾,本文是放置在自建LCD Driver的資料夾,接著在這個資料夾include path "emWin/inc"與"emWin/Config"。
將原本在freertos.c生成的task移至FramewinDLG.c的最底部,然後新增初始化。
新增下面這兩行
WM_MULTIBUF_Enable(1);
CreateFramewin();
這個task是在cubeMX自行新增命名為lcdDisplay
CRC需要勾選,否則在GUI_Init()時不會進行初始化,會在這邊卡住無法繼續執行。
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
留言列表