STemWin移植筆記


實現將STemWin圖形庫移植到STM32F103ZET中,記錄簡單的操作步驟,以便自己后續查閱。


1/ 從官網獲取STemWin庫的壓縮包en.stemwin.zip。

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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM