實現將STemWin圖形庫移植到STM32F103ZET中,記錄簡單的操作步驟,以便自己后續查閱。
2/ 解壓后,在路徑STemWin_Library_V1.2.0\Libraries\STemWinLibrary532下可以找到庫文件。
3/ 移植前的准備工作,創建一個完整的工程,並實現對lcd驅動的顯示函數(需要用到畫點和讀點兩個基礎函數)。另外需要實現一個定時中斷(可以用系統SysTick實現)。
4/ 將STemWin庫路徑STemWin_Library_V1.2.0\Libraries\STemWinLibrary532下的Config、inc、Lib、OS文件夾拷貝到工程目錄中(可以新建一個專門的文件夾存放)。
5/ 將拷貝過來文件其中的5個文件添加到keil工程中。
Config\GUIConf.c
Config\GUIDRV_Template.c
Config\LCDConf_FlexColor_Template.c(特殊LCD驅動器改成LCDConf_Lin_Template.c)
Lib\STemWin532_CM3_Keil.lib(該文件根據工程實際需求確定的)
OS\GUI_X.c(如果采用操作系統則添加GUI_X_OS.c)
6/ 修改GUIConf.c
1 #define GUI_NUMBYTES 1024*30
7/ 修改GUIDRV_Template.c
包含lcd驅動庫的顯示頭文件,#include "my_lcd.h"
函數_SetPixelIndex()中,在大括號中間,實現顯示器畫點操作。
函數_GetPixelIndex()中,在大括號中間,實現顯示器讀點操作。
8/ 修改LCDConf_FlexColor_Template.c
包含lcd驅動庫的顯示頭文件,#include "my_lcd.h"
根據顯示器尺寸修改兩個參數:XSIZE_PHYS和YSIZE_PHYS
實現讀寫lcd寄存器的四個函數:LcdWriteReg、LcdWriteData、LcdWriteDataMultiple、LcdReadDataMultiple
1 /********************************************************************* 2 * 3 * Local functions 4 * 5 ********************************************************************** 6 */ 7 /******************************************************************** 8 * 9 * LcdWriteReg 10 * 11 * Function description: 12 * Sets display register 13 */ 14 static void LcdWriteReg(U16 Data) { 15 // ... TBD by user 16 LCD->LCD_REG = Data; 17 } 18 19 /******************************************************************** 20 * 21 * LcdWriteData 22 * 23 * Function description: 24 * Writes a value to a display register 25 */ 26 static void LcdWriteData(U16 Data) { 27 // ... TBD by user 28 LCD->LCD_RAM = Data;//寫入數據 29 } 30 31 /******************************************************************** 32 * 33 * LcdWriteDataMultiple 34 * 35 * Function description: 36 * Writes multiple values to a display register. 37 */ 38 static void LcdWriteDataMultiple(U16 * pData, int NumItems) { 39 while (NumItems--) { 40 // ... TBD by user 41 LCD->LCD_RAM = *pData++;//寫入數據 42 } 43 } 44 45 /******************************************************************** 46 * 47 * LcdReadDataMultiple 48 * 49 * Function description: 50 * Reads multiple values from a display register. 51 */ 52 static void LcdReadDataMultiple(U16 * pData, int NumItems) { 53 while (NumItems--) { 54 // ... TBD by user 55 *pData++ = LCD->LCD_RAM; 56 } 57 }
LCD_X_Config函數中,根據實際LCD顯示器的驅動芯片,修改GUIDRV_FlexColor_SetFunc函數的具體參數,驅動芯片對應的參數可詳查手冊。
LCD_X_DisplayDriver函數,case LCD_X_INITCONTROLLER部分中添加調用LCD顯示器的初始化函數。
9/ 根據項目實際情況,修改頭文件GUIConf.h
#ifndef GUICONF_H #define GUICONF_H /********************************************************************* * * Multi layer/display support */ #define GUI_NUM_LAYERS 2 // Maximum number of available layers /********************************************************************* * * Multi tasking support */ #ifdef OS_SUPPORT #define GUI_OS (1) // Compile with multitasking support #else #define GUI_OS (0) #endif /********************************************************************* * * Configuration of touch support */ #ifndef GUI_SUPPORT_TOUCH #define GUI_SUPPORT_TOUCH (0) // Support touchscreen #endif /********************************************************************* * * Default font */ #define GUI_DEFAULT_FONT &GUI_Font6x8 /********************************************************************* * * Configuration of available packages */ #define GUI_SUPPORT_MOUSE (1) /* Support a mouse */ #define GUI_WINSUPPORT (1) /* Use window manager */ #define GUI_SUPPORT_MEMDEV (1) /* Memory device package available */ #define GUI_SUPPORT_DEVICES (1) /* Enable use of device pointers */ #endif /* Avoid multiple inclusion */
10/ 主函數中初始化硬件相關后,編寫測試代碼,並在while(1)循環中調用函數GUI_Delay(10):
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); GUI_Init(); GUI_SetBkColor(GUI_BLUE); //設置背景顏色 GUI_SetColor(GUI_YELLOW); //設置顏色 GUI_Clear(); //清屏 GUI_SetFont(&GUI_Font24_ASCII); //設置字體 GUI_DispStringAt("HELLO WORD!", 0, 0); GUI_DispStringAt("123456789", 0, 100);