1. 新建目录
STemWinLibrary532
-->inc // 拷贝 STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\inc下的全部文件。
-->Lib // 拷贝 STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\Lib\STemWin532_CM3_Keil.lib
STemWinConf
// 拷贝 STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\OS\GUI_X.c
// 拷贝 STemWin_Library_V1.2.0\Libraries\STemWinLibrary532\Config下的
// GUIConf.c、GUIConf.h、LCDConf_FlexColor_Template.c、LCDConf_FlexColor_Template.h
// 将这5个文件的属性改为读写。将LCDConf_FlexColor_Template.c改为LCDConf.c
// 将LCDConf_FlexColor_Template.h改为LCDConf.h
2. 新建Keil工程,将上述*.c和*.lib添加到工程中。
3. GUIConf.c
a. #define GUI_NUMBYTES 0x200000
定义STemWin使用内部大小。根据自己单片机内存大小修改。STM32F103ZE 有64K ram。
我定义#define GUI_NUMBYTES 1024*10 // 10K RAM
b. GUI_SetDefaultFont(GUI_FONT_8X16);
// 修改默认字体大小
4. LCDConf.c
a. #define XSIZE_PHYS 240 // To be adapted to x-screen size
#define YSIZE_PHYS 320 // To be adapted to y-screen size
// 定义屏幕的大小。
b. 添加LCD FSMC 接口定义
/* LCD /CS is NE4 - Bank 4 of NOR/SRAM Bank 1~4 */
#define LCD_BASE (0x60000000UL | 0x0C000000UL)
#define LCD_REG16 (*((volatile U16 *)(LCD_BASE )))
#define LCD_DAT16 (*((volatile U16 *)(LCD_BASE+2)))
c. 添加读写函数实现
static void LcdWriteReg(U16 Data) {
// ... TBD by user
LCD_REG16 = Data;
}
static void LcdWriteData(U16 Data) {
// ... TBD by user
LCD_DAT16 = Data;
}
static void LcdWriteDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
LCD_DAT16 = *pData++;
}
}
static void LcdReadDataMultiple(U16 * pData, int NumItems) {
while (NumItems--) {
// ... TBD by user
*pData++ = LCD_DAT16;
}
}
d. Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
GUI_SWAP_XY: X轴Y轴交换,横屏/竖屏
GUI_MIRROR_Y:Y轴镜像
GUI_MIRROR_X:X轴镜像
e. GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);
在STemWin532.pdf文档中搜索GUIDRV_FlexColor_SetFunc函数使用说明。
GUIDRV_FLEXCOLOR_F66708:支持的LCD驱动器列表。
我的驱动器是 SSD1289 所以选择 GUIDRV_FLEXCOLOR_F66702
GUIDRV_FLEXCOLOR_M16C0B16:仔细看文档介绍。
f. int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
//添加单片机FSMC和IO口初始化。和LCD驱动器的初始化。。
5. GUIConf.h
//添加颜色定义
#ifndef GUI_USE_ARGB
#define GUI_USE_ARGB 1
#endif
#define GUI_DEFAULT_FONT &GUI_FONT_8X16
//修改默认字体
6. 打开CRC
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
7. 代码事例 main.c
#include "stm32f10x.h"
#include "GUI.h"
int main(void)
{
int i = 0;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
GUI_Init();
for(i=50000;i>0;i--);
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetFont(GUI_FONT_8X13_1);
GUI_DispString("www.segger.com\nhello world!\n");
for(i = 0; i < 50; i += 5){
GUI_DrawCircle(160,120, i);
}
while (1) {
for(i=50000;i>0;i--);
}
}