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