版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
普中STM32F1xxSTemWin 前本开发指南讲解如何将STemWin移植到普中STM32F1xx开发板,以及如何使用STemWin中的各个控件,让大家能够设计出漂亮的GUI界面。本套主要以STemWinGUI库为例子进行讲解。中的STemWin大家可以理解为EMWIN或者ucGUI,它们都是类似的。为了兼容我TFTLCDlcdlcd_driver.h了。比如说你的彩屏背ILI9341lcd_driver.h的宏打开//#define#defineTFTLCD_ILI9341//#define//#define在man函第1章STemWin介 emWin简 STemWin和emWin、ucGUI的区别与联 emWin的应用场 第2章STemWin机移 2.1STemWin源 STemWin文件介 STemWin应用软件架 添加STemWin文件到工 修改工程文 移植触摸 添加STemWinDemo测 实验现 第3章Windows上仿真 3.1emWin仿真文 打开emWin仿真文 开始emWin仿 emWin仿真文件介 Application文 Config文 GUI文 Sample文 显示o 第4章STemWinUCOSIII移 添加STemWin文件到工 修改工程文 添加STemWinDemo测 实验现 第5章文本显 创建文本显示工 文本显示代 如何查阅API函 实验现 第6章数值显 创建数值显示工 数值显示代 STemWin_NumDec_Test()函 STemWin_NumFloat_Test()函 STemWin_BinHex_Test()函 实验现 第7章2D图形显 创建2D图形显示工 2D图形显示代 STemWin_2DDraw_Test()函 STemWin_Alpha_Test()函 STemWin_Line_Test()函 STemWin_2DGraph_Test()函 实验现 第8章位图显 位图转换器介绍和使 位图转换器介 位图转换器使 创建位图显示工 位图显示代 实验现 第9章颜色显 emWin预定义的颜色和调色板模 创建颜色显示工 颜色显示代 实验现 第10章设 10.1设备介 10.1.1设备的使 内存要 性 10.2设备应 10.2.1设备API函 创建设备工 10.2.3设备代 实验现 分段设 分段介 创建分段工 分段代 实验现 自动设备对 自动设备对象介 创建自动设备对象工 自动设备对象代 实验现 第11章窗口管理 必备窗口知 窗口重 创建窗口重绘工 窗口重绘代 实验现 窗口函数演 创建窗口函数演示工 窗口函数演示代 实验现 窗口裁 创建窗口裁剪工 窗口裁剪代 实验现 第12章GUIBuilder的使 GUIBuilder介 创建GUIBuilder工 修改GUIBuilder生成的C文 实验现 第13章 13.1框的基本原 创建 资源 框过程函 初始化 定义框行 框 第14章窗口对象(小工具 基础知 可用小工 了解重绘机 如何使用小工 通用小工具 用于控件的WM函 14.2.3用户绘制小工 第15章BUTTON控 BUTTON控件介 通知代 键盘反 BUTTON BUTTON控件实 创建BUTTON控件工 BUTTON控件代 实验现 BUTTON控件显示位图实 制作位图C文 设计GUI界 创建BUTTON控件显示位图工 BUTTON控件显示位图代 实验现 第16章CHECKBOX控 通知代 键盘反 CHECKBOX CHECKBOX控件实 程序代 实验现 第17章DROPDOWN控 DROPDOWN控件介 通知代 键盘反 DROPDOWN DROPDOWN控件实 程序代 实验现 第18章EDIT控 EDIT控件介 通知代 键盘反 EDIT EDIT控件实 程序代 实验现 第19章FRAMEWIN控 FRAMEWIN控件介 键盘反 FRAMEWIN FRAMEWIN控件实 程序代 实验现 第20章GRAPH控 GRAPH控件介 GRAPH控件结 创建和删除GRAPH控 GRAPH控件绘制过 支持的曲线类 GRAPH键盘反 GRAPH GRAPH控件实 GRAPHXY控件实 GRAPHYT控件实 第21章HEADER控 HEADER控件介 HEADER通知代 HEADER键盘反 HEADER HEADER控件实 程序代 实验现 第22章ICONVIEW控 ICONVIEW控件介 ICONVIEW通知代 ICONVIEW键盘反 ICONVIEW ICONVIEW控件实 程序代 实验现 第23章LISTBOX控 LISTBOX控件介 LISTBOX通知代 LISTBOX键盘反 LISTBOX LISTBOX控件实 程序代 实验现 第24章LISTVIEW控 LISTVIEW控件介 LISTVIEW通知代 LISTVIEW键盘反 LISTVIEW LISTVIEW控件实 程序代 实验现 第25章LISTWHEEL控 LISTWHEEL控件介 LISTWHEEL通知代 LISTWHEEL键盘反 LISTWHEEL控件实 程序代 实验现 第26 控 26.1控件介 菜单消 数据结 键盘反 控件实 程序代 实验现 第27章MESSAGEBOX控 MESSAGEBOX控件介 MESSAGEBOX通知代 MESSAGEBOX键盘反 MESSAGEBOX MESSAGEBOX控件实 程序代 实验现 第28章MULTIEDIT控 MULTIEDIT控件介 MULTIEDIT通知代 MULTIEDIT键盘反 MULTIEDIT MULTIEDIT控件实 程序代 实验现 第29章MULTIPAGE控 MULTIPAGE控件介 MULTIPAGE通知代 MULTIPAGE键盘反 MULTIPAGE MULTIPAGE控件实 程序代 实验现 第30章PROGBAR控 PROGBAR控件介 PROGBAR通知代 PROGBAR键盘反 PROGBAR PROGBAR控件实 程序代 实验现 第31章RADIO控 RADIO控件介 RADIO通知代 RADIO键盘反 RADIO RADIO控件实 程序代 实验现 第32章SCROLLBAR控 SCROLLBAR控件介 SCROLLBAR通知代 SCROLLBAR键盘反 SCROLLBAR SCROLLBAR控件实 程序代 实验现 第33章SLIDER控 SLIDER控件介 SLIDER通知代 SLIDER键盘反 SLIDER SLIDER控件实 程序代 实验现 第34章TREEVIEW控 TREEVIEW控件介 TREEVIEW控件术语说 TREEVIEW通知代 TREEVIEW键盘反 TREEVIEW TREEVIEW控件实 程序代 实验现 第35章WINDOW控 WINDOW控件介 WINDOW通知代 WINDOW键盘反 WINDOW WINDOW控件实 程序代 实验现 第36章字 字体简 字体类 字体格 C文件格 系立字体(SIF)格 外部位图字体(XBF)格 TrueType字体(TTF)格 自定义字 选择字 字体 第37章XBF格式字体显 XBF格式字库制 XBF字库 XBF格式字体显示实 创建XBF字 实验代 启用UTF-8编 实验现 第38章TTF格式字体显 TTF字体介 TTF字体 TTF格式字体显示实 type库移 type内存管 准备TTF字 TTF格式显示代 实验现 第39章外部器汉字显 汉字显示介 字库制 制作汉字字 制作英文字符字 外部器汉字显示实 实验代 实验现 第40章BMP显 BMP支持格 BMP文件 BMP显示实 实验代 实验现 第41章JPEG显 41.1支持的JPEG压缩方 41.2器使用要 JPEG JPEG显示实 程序代 实验现 第42章GIF显 42.1显示GIF文 42.2器使 GIF GIF显示实 程序代 实验现 第43章PNG显 43.1PNG库文件移 43.2器使 PNG PNG显示实 程序代 实验现 1STemWin介emWin简emWnemedwinSegeremWnLCDLCDSTemWinemWin、ucGUI的区别与联我们知道emWin是Segger公司开发设计的,该公司向ST公司了emWin的 从而ST公司也得到了定制版的emWin,然后改了名字叫STemWin。当用户在STM32上使用emWin软件库时,是不需要向emWin或ST公司的,而且STemWin针对ST的还做了优化,我们中使用的就是STemWin,说白了其实和emWin是一样的。在当前大部分人不知道,其实uC/GUI是Segger公司为Micrium公司(也就是制作uC/OS的公司)定制的图形软件库,说是定制,但其实它跟emWin的区别并不大,以致于区分不出它们在功能上究竟差别在何处。比较确定的是旧版本uC/GUI在网上还可以找到开源的代码,而新版本命名为uC-GUIV5.26,STemWin版本命名为STemWinLibraryV5.26,emWin版本则为emWinV5.26,所以,要比较这三个软件库功能上的区别,只需要看它们的版本号 由于我们使用的是STM32开发平台,自然我们选择的是STemWin。因为如果我们选择的是emWin或uC/GUI使用到STM32产品上,同样是需要向Segger或Micrium公司的,而使用STemWin就不存在这个问题。在STemWin里有一个检测机制确定代码所运行的平讲解中,无特殊说明,不再区分emWin和STemWin。emWin的应用a.绘制2-D图形:绘制圆、椭圆、多边形、弧线、线图和饼形图等;b.显示位图文件:显示BMP、JPEG、GIF及PNG格式的文件;显示文字:支持显示多国语言的文字,如处理用户输入:如键盘、鼠标及触摸屏的人机交互输入处理emWinROMRAM耗相对来说并不高。据统计,它们提供的一个基本例程(移植了emWin函数库,显示“oWorld”),消耗ROM60KB,RAM7KB,这在当前大多数嵌入式平台都是可以接受的。又因为emWin可以在多任务系统及机的平台上运行,尤其适合嵌入式乱七八糟的开发要emWinemWin的效果,如图1-1。1-1emWin第2章STemWin机移本章向大家介绍如何将STemWin移植到普中STM32开发板上,并分析STemWin的2.1STemWin源实验现2.1STemWin源STemWin文件介片是STM32F103系列的,所以需要STM32F103对应的Cube,STM32F1系列使用到的Cube为STM32CubeF1,当前的STM32CubeF1版本为1.4.0,地址:_searchtype=partnumber,界面如图2-1-1所示。如果各位要自己的话还需要注册,所以大家没有必要花这个时间放在上。我们已经将文件好存放在“STemWin参考2-1-1我们使用的STM32CubeF1版本是1.0.0的,虽然不是的STM32CubeF1版本,但1.0.0版本的稳定性得到了满足,而且功能全部都具解压后STM32Cube_FW_F1_V1.0.0STiemWinSTemWin源码,STemWin源码路径为:STM32Cube_FW_F1_V1.0.0->Middlewares->ST->STemWin,这个就是STemWin源码,如图2-1-2所示,注意图中的路径。2-1-2STemWin2-1-3STemWin现对每个文件夹进行简单介ConfigGUIConf.cSTemWin间分配,GUIConf.h文件用于裁剪STemWin的功能。其余的GUIDRV_Temte.c、LCDConf_FlexColor_Temte.c、LCDConf_Lin_Temte.c是STemWin应用在不同液晶时使用的不同驱动模板。ationSTemWin526.pdfSTemWinCPUGCC、MDKIARSTemWin库,在使用的时候我们要根据自己的平台选择合适的库文件。由于我们采用的M3并且KEILMDK作为开发软件,所以选择对LIBOS文件夹:它包含了GUI_X.c及GUI_X_RTOS.c文件,分别是对应机平台GUISTemWinSimulation文件夹:它包含了一些电脑仿真所需的文件SoftwareSTemWinBmpCvtST.exe、emVNC.exe、GUIBuilder.exe、FontCvtST.exe和JPEG2Movie.exe这几个软件工具。BmpCvtST.exe用于把数据转换成C文件,GUIBuilder.exe是一个使用图形界面方式开发STemWin应用的工具(可以开发出类似界面),而FontCvtST.exe则用于字体文件转换。Release_Notes.html文件:是关于STemWin库不同版本的简要更新说明文档STemWinSTemWin2-1-42-1-4STemWin该架构看起来并不复杂,从最底层看起 首先是硬件层,硬件层就是指最基本向应用层则提供了各种便于用户制作GUI应用的接口。STeminSTeminBSTemi。STemWin文件到工图2-2- 们也提供给了大家,在“实验0:移植STemWin基础工程\STemWin机移植工图2-2- pritfSTM2ST32F1制我们这个文件夹即可使用,只不过我们里面的串口使用的是USAT1,如果你的串口调试3:Malloc文件夹,用于存放内存管理文件,可以管理STM32内部和外部RAM名函数注意要修改,比如在STemWinLCD操作,所以我们底层彩屏驱动不要出现LCD单程中件夹,命名为EMWIN,将我们上面好的STemWin源码拷贝到里面,把STemWin源码文件夹根据前面软件架构介绍以及源码文件功能介绍,所需的STemWin加入到工程中,并且添加对应的头文件2-2-2示:2-2-2STemWin根据我们在图2-2-2中添加的几个文件,我们这里做一个简单的功能说明。GUI_X_Touch_og.c文件:这个文件主要作用是对STemWin触摸功能的驱动,在我们后面移植触摸功能的时候就会在这个.c文件内修改。(Config文件下)GUIConf.c文件:这个文件主要作用是对STemWin的一些初始化配置,比如对STemWin内存的分配。在这个文件内还包含了GUIConf.h头文件,这个头文件的用处可大了,主要对STemWin的配置进行设置,比如是否使用器,是否使用触摸功能,是否支持操作系统等等都在这个头文件内进行配置。(Config文件下)STemWin,重点也就在这个文件,需要将彩屏的读点和画点以及划线等底层函数放入到它对应的函数内。(Config文件下)LCDConf_FlexColor_Temte.c文件:这个文件主要用于对STemWin初始化配置,比如创建显示驱动器件,设置颜色转换程序和显示尺寸等。(Config文件下)过EMWIN中文参考手册进行了解各个API使用。我们打开STemWin源码STemWin下的Lib文件,如图2-2-3所示。STemWin为不OSOSLib所以只保留适合我们所使用开发环境的带OS和不带OS的两种库文件。因为我使用的是KEIL,所以我只保留STemWin526_CM3_Keil.lib和STemWin526_CM3_OS_Keil.lib这两个库,其他的删除掉,如果使用的是其他内核的MCU和开发环境的话请选择相应的库文件,这一章我们讲解的是STemWin机的移植,因此在工程中添加STemWin526_CM3_Keil.libSTemWin7个文件,这里为了减小工程所占内存的大小,将ation、Software、Simulation2-2-3STemWinLIB工程添加完成后编译LCDConf.h件,我们新建一LCDConf.h修改工程GUIConf.hGUIConf.h了默认字体,GUIConf.h文件代码如下。#ifndefGUICONF_H#define#define //#define (0)//#define (0)//#define #define#define#define#defineGUI_SUPPORT_DEVICES GUIConf.c存管理文件,内存管理文件中可以对开发板外部1MSRAM和本身64K的内存进行管理,所以我们可以利1MSRAMSTemWin内存分配,为了能够兼容其SRAM的板子,我们在程序中定义USE_EXRAM,用来切换是使SRAMRAM。GUIConf.c文件代码如下:#include"GUIh"#include"sram.h"#defineUSE_EXRAM1//使用外//设置EMWIN#defineGUI_NUMBYTES#defineGUI_BLOCKSIZE0X80//void{if(USE_EXRAM)//使用外部{=//GUI_NUMBYTES字节的内GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);//设置快的平均尺寸,该区越大,可用的);//}else//{U32*aMemorymymalloc(SRAMIN,GUI_NUMBYTES);从内部RAMGUI_NUMBYTES字节的内GUI_ALLOC_AssignMemory((U32*)aMemory,GUI_NUMBYTES);//为管理系统分配一个GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);//设置快的平均尺寸,该区越大,可用的);//}}修改GUIDRV_Temte.c文这个文件是STemWin的重中之重,所以必须要认真掌握这个文件的移植方法。在这个文件中我们要完成STemWin的打点、读点、填充等函数的实现,最后还优化了16BPPSTemWin在这个文件中我们需要修改四个函数:_SetPixelIndex(),_FillRect()和_DrawBitLine16BPP(),修改后的这四个函数如下staticvoid_SetPixelIndex(GUI_DEVICE*pDevice,intx,inty,int }*staticunsignedint_GetPixelIndex(GUI_DEVICE*pDevice,intx,int{unsignedint#if(LCD_MIRROR_X==1)||(LCD_MIRROR_Y==1)||(LCD_SWAP_XY==intxPhys,xPhys=LOG2PHYS_X(x,y);yPhys=LOG2PHYS_Y(x,#definexPhysx#defineyPhys{PixelIndex=LCD_ReadPoint(x,y);//这个是彩屏底层的读点}#if(LCD_MIRROR_X==0)&&(LCD_MIRROR_Y==0)&&(LCD_SWAP_XY==#undefreturn}*staticvoid_FillRect(GUI_DEVICE*pDevice,intx0,inty0,intx1,inty1)LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//这个是彩屏底层的}*DrawBitmap16BPP,notDrawingof16bpphighcolorOnlyrequiredfor16bppcolordepthoftarget.Shouldberemovedstaticvoid_DrawBitLine16BPP(GUI_DEVICE*pDevice,intx,inty,U16constGUI_UNI_PTR*p,intxsize){LCD_PIXELINDEXfor(;xsize>0;xsize--,x++,{pixel=);// }}修改LCDConf_FlexColor_Temte.c文这个文件有LcdWriteReg()、LcdWriteData()、LcdWriteDataMultiple()、LcdReadDataMultiple()、LCD_X_Config()和LCD_X_DisyDriver()这6个函数。因为STemWin自带有一些LCDIC的驱动程序,使用前4个函数可以直接使用STemWinLCDLCDICSTemWin不支持的,所以这里我们没用这4个函数而是使用我们自己的LCD初始化函数封装起来传递给STemWin,在这里我们把这4个函数删除掉,只留下LCD_X_Config()和LCD_X_DisyDriver()这两个函数,LCD_X_Config()函数代码如下所示:voidLCD_X_Config(void){GUI_DEVICE_CreateAndLink(&GUIDRV_Temte_API,GUICC_M565,0,0);//创LCD_SetSizeEx(0,lcddev.width,lcddev.height);LCD_SetVSizeEx(0,lcddev.width,}上面代码中的GUI_DEVICE_CreateAndLink()函数用来创建显示驱动器件,设置用于存取显示器的颜色转换程序,并将驱动器件连接到给定层的器件列表。函数的第一个参数是一个指向结构体的指针个结构体就是显示器的驱动STemWin带一IC的驱动,因此这里可以选择相应的驱动程序,具体使用请查阅emWin手册的“显示驱动”章节。第二个参数是指定所使用的调STemWin有很多调色板可以使用,具体使用请查阅emWin使用的是GUICC_M565的调色板,也就RGB565,最后我们根据LCD尺寸来设置屏幕的大小。Lcddev.widthlcddev.heightTFTX度Y度。编写移植到了这些文件,我们已经将STemWin的移植基本完成,可以编写测试代码来测试#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"touchh"#include"timerh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"GUIh"int{ //LCD初始化 //初始化SRAM //1KHZ定时器1ms //10ms中断 }
GUI_SetBkColor(GUI_BLUE);//设置背景颜色GUI_SetColor(GUI_RED);//设置颜色GUI_Clear();//清屏 STemWinCRCSTemWin很简单,是在LCD上的(0,0)坐标处显示”oWord!”,如果要让彩屏横屏显示,可以在LCD初始化函数TFTLCD_Init()中使用LCD_Disy_Dir()函数来改变横竖屏,默认情况下传递的参数是0,即我们使用的是竖屏,如果将参数改为1,将变成横屏显示。竖屏显示效果如图2-3-1所示。从显示结果上来看,说明我们移植STemWin成功。接下来我们还需要移植触摸功能移植触摸 在我们机基础工程内已经包含了我们开发板所需的触摸底层文件,我们只需要将touch及flash还有spi文件夹进来就可以,如图2-4-1所示。其实也不用,我们文件路径包含进来,如2-4-2示。添加STemWin触摸GUI_X_Touch_og.c文此文件进行了修改,将我TFT的触摸驱动移植STemWin触摸接口#include"GUIh"#include"touchh"#include"usart.h"void{//}void{}int{return //X}int{returnTOUCH_ReadData(0X90);//Y}GUI_X_Touch_og.c文件有四个函数:GUI_TOUCH_X_ActivateX(),GUI_TOUCH_X_ActivateYGUI_TOUCH_X_MeasureX(GUI_TOUCH_X_MeasureY()STemWinGUI_TOUCH_X_MeasureX()GUI_TOUCH_X_MeasureYXYAD们使用的触摸屏是电阻屏,所以直接将我们底层触摸X和Y的AD值函数放进来即可。修改GUIConf.h和LCDConf_FlexColor_Temte.c文GUIConf.hGUI_SUPPORT_TOUCH1STemWinLCDConf_FlexColor_Temte.c文件的开始添加如下代码#defineTOUCH_AD_TOP #defineTOUCH_AD_BOTTOM#defineTOUCH_AD_RIGHT#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"touchh"#include"timerh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"GUIh"void{intxPhys;intyPhys;{GUI_TOUCH_GetState(&TouchState);//GetthetouchpositioninpixelxPhys=GUI_TOUCH_GetxPhys();//GettheA/DmesurementresultinxyPhys=GUI_TOUCH_GetyPhys();//GettheA/Dmesurementresultiny oginput:\n",0,GUI_DispDec(xPhys,4);GUI_DispString(",y:");GUI_DispDec(yPhys,4);GUI_DispDec(TouchStatex,4);GUI_DispString(",y:");}}int{ //LCD初始化 //初始化SRAM //1KHZ定时器1ms //10ms中断 }
ADLCD如图2-4-3所示,默认屏幕为竖屏,其中蓝色为原始的AD值,红色的为屏幕坐标值。最后一步我们还要修改LCDConf_FlexColor_Temte.c文件中的LCD_X_Config()voidLCD_X_Config(void){GUI_DEVICE_CreateAndLink(&GUIDRV_Temte_API,GUICC_M565,0,0);//创建显示驱动件LCD_SetSizeEx(0,lcddev.width,lcddevheight);if(lcddev.dir==0)//竖屏{{}}函数GU_TOCH_alirat()的参数就可以按照如下程序配置,注意第4,5个参数的设置,此设置值就是我们前面定义触摸上下左右的一个宏。在第(3)步骤内。到这里触摸把STeWin些Demo(的Deo大。添加STemWinDemo测,那么我们可以通过STM32定时器功能来给Demo提供系统时钟。Demo中还需要定时调提供系统时钟,使用STM32的定时器6来周期调用GUI_TOUCH_Exec()函数处理触摸屏。STemWin中延时最小单位是1ms,所以我们需要设定定时器3定时周期为1ms,触摸通,#include"GUIh"#include IOint32_tvoidTIM3_Int_Init(u16arr,u16{NVIC_InitTypeDefNVIC_InitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//设置时钟分割 //使能}void{{}}//这里时钟选择为APB12APB1//psc:时钟预voidTIM6_Int_Init(u16arr,u16{TIM_TimeBaseInitTypeDefNVIC_InitTypeDefNVIC_InitStructure;TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//设置分频值,10khz的计数频率TIM_TimeBaseInitStructure.TIM_Period=arr;//自动重装载值计数到5000500msTIM_TimeBaseInitStructure.TIM_ClockDivision=0时钟分割:TDS=Tck_TimTIM_ITConfig(TIM6,TIM_IT_Update|TIM_IT_Trigger,ENABLE);//使能TIM6的更新NVIC_InitStructure.NVIC_IRQChannel=TIM6_IRQn;//TIM6中断NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能通道TIM_Cmd(TIM6,ENABLE);//定时器6使}void{{});//}STeWin_imeS这个变量进行累加,所以需要定义为一个全局变量。这个变量也是STeW#inlude"GI.h系统时钟移植好后,接下来就是将的Demo文件到我们的工程文件中,并且加GUIEMOcbsph,加bs.h图25-1所。2-5-1Demo添加完Demo文件后,我们就开始编写主函数的程序,在主函数中先完成相应外设的初始化,比TFT屏1MSRAM内RAM初始化。接着打开CRC钟,这一步千万不要漏掉,否则STemWin不会正常运行,然后设置设备标识,因为在Demo运行的时候会用到设备,下一步对STemWin的GUI进行初始化,最后调用GUIDEMO_Main()函数。mainint{ //LCD初始化 //初始化SRAM //1KHZ定时器1ms //10ms中断 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则}
小,此堆栈值改为0x ,如图2-5-2所示:2-5-2实验上一步我们已经将STemWin全部移植完成。接下来我们就编译后将hex文件到我们开发板内运行,运行效果2-6-12-6-1STemWinDemo3Windows上仿然不是,因为Segger给我们提供了很多例程都是可以在Windows系统上仿真的,也就是说大家只要有一台电脑STemWin。(但如果还没有电脑的话,那真让我爱莫能助咯,嘿嘿)而且学习仿真的好处是即使你没有STM32到你的开发板上而烦恼。接下来我们就正式开始介绍如何在WindowsSTemWin。3.1emWin仿真文emWin显示o3.1emWin仿真文由于ST没有提供STemWin的PC仿真文件,但是STemWin是基于emWin的,只STMCUemWinPCemWin的仿真文件我们可以在segger官网到,地址: /downloads.html?pid=263-1-1图3-1-1emWin界到seger是V5.2同STeWin用V5.6的仿真。仿真文件我们已经提供给大家,所以不需要花时间去。仿真文件在STeWn\emin526PCemWin模拟需要VisualC++(6.00或更高版本)的软件,我们使用的是VisualC++6.0,对于VC++6.0软件的安装我们这里就不多说,大家可以下,默认大家手上的电脑都已经安装VC++6.0。大家可以直接把我们PC解压,或者可以将提供的压缩文件拷贝到电脑其他的盘,比D命名3-2-1上图红色框起的压缩文件就是我们提供的Windows仿真软件。我们直接在此 压(大家可以到其他盘然后新建一个英文文件夹保存后解压)。当解压完成以后我们会SimulationTrial.DSW文件,大家只需要双击此文件就VC++6.03-2-23-2-2双击之后就会弹出如图3-2-3所示的界面,我们只需要点击关闭仿真程序了3-2-33-2-36Application文件:内部含有emWin的Demo演示例程,这些例程涵盖了所有STemWin功能ConfigemWinLCDGUIConf.c,GUIConf.h,LCDConf.c,LCDConf.hSIMConf.c这5个文件。emWin仿F5emWn3-413-4-1emWinDemoApplication那些.c和.h文件,如图3-4-2所示。3-4-2DemoGUI效果,如图3-4-3所示。跟我们移植STemWin跑的综合测试相比,emWin的这个综合Demo更美观,这个主要是因为STemWin提供Demo和仿真Demo不一样,而且还受液晶屏及CPU运行速度的影响。3-4-3emWinemWin仿真文件介上一节我们运行了emWin提供的综合Demo,可见其强大。那么在这强大的背后我们需要了解程序是如何运作的,也就是要了解emWin仿真文件的功能。Application文emWin提供的那个综合Demo运行的就是Application这里面的文件,这部分文件emin3-4-4Application面我们已经简单介绍了这个文件的作用,其内部含有GUIConf.c,GUIConf.h,GUIConf.c,GUIConf.h,LCDConf.c,LCDConf.h介绍。首先我们打GUIConf.c文件#include"GUI**//Definetheavailablenumberofbytesavailableforthe#defineGUI_NUMBYTES//Definetheaverageblock*PublicCalledduringtheinitializationprocessinordertosetupavailablememoryforthevoid{//32bitalignedmemorystaticU32aMemory[GUI_NUMBYTES///Assignmemoryto}emWinGUI_NUMBYTES0X4000004MGUI_ALLOC_AssignMemory()4M的内存分配给emWin,调用GUI_ALLOC_SetAvBlockSize()设置块的平均大小,块大小同样使用一个宏GUI_BLOCKSIZE进行定义,默认值是0x80。在来看下其头文件,也就GUIConf.h。在这个头文件中定义了一些宏,通过这些宏来控#ifndefGUICONF_H#defineMultilayer/disy#define umnumberofavailableMultitasking#define (1)//CompilewithmultitaskingConfigurationofavailable#defineGUI_SUPPORT_TOUCH (1)//Supportatouchscreen(req.win-manager)#defineGUI_SUPPORT_MOUSE (1)//Supportamouse#defineGUI_WINSUPPORT (1)//Windowmanagerpackageavailable#defineGUI_SUPPORT_MEMDEV(1)//MemorydevicesavailableConfigurationofwindow#defineWM_SUPPORT_NOTIFY_VIS_CHANGED(1)//EnablesendingofWM_NOTIFY_VIS_CHANGEDmessagesDefault#define #endif/*Avoidmultipleinclusion接着再来分LCDConf.c文件,这个文件是用来LCD以及显示驱动和颜色转换格式进行配置,面我们已经运行了仿真文件,看到了具体的现象,LCD大小也是固定的,默LCD大小320*240,如果我们要LCD显示界面调大,就可以从这个文件入手,#defineXSIZE_PHYS320 //修改LCD宽度X#defineYSIZE_PHYS //修改LCD高度LCD_X_Confi(yDrive(格式,该函数的输入参数是根据Windows系统的环境配置的。CmdLCD_X_INITCONTROLLER始化液晶控制器。LCDConf.h文件没有东西,不需要了解面我们移植机STemWin实验的时候也在这两个函数内移植了彩屏的底层驱动GUI文GUI文件夹内的文件才是emWin真正的。GUI文件夹内含有Include文件夹和文件夹内放emWin因为emWin不提供源码,所以把源码封装成一LIB3-4-5GUISample文演示程序和前面讲的Application文件夹演示程序是不一样的,我们主要学习的还是而且提供的中文手册也是针对ample文件夹例程做讲解的。Sample文件夹截图如图3-4-6所示。3-4-6Sample o前面我们仿真出来的效果是emWin提供的一个综合测试Demo,但是我们学习emWin不Sample这个文件夹内文件开始学习,学习最基础的一个oWorld!显示实验。在Samle文件中就提供这样的实验例程,因为仿真文件默认编译的是那些高端大气的文件,所以要想办法它,打开最基础的oWold!显示文件。接下来我们就这样操1:先将工程扩展关闭,缩小成如图3-5-1所示3-5-1图3-5-2编译配3:打开Sample->Tutorial文件夹,下拉选择到BASIC_oWorld.c这个文件,具体操作步骤如3-5-3示。4:采用步骤2方法,打开BASIC_oWorld.c这个文件编译,也就是取消掉“组建时排除文件”选项。具体操作步骤如图3-5-4所示。上述步骤完成之后再次编译工程文件,编译成功后点击运行即可看到LCD显示 World!。步骤如图3-5-5所示。3-5-5emWin就讲解完了,大家可以多练习练习,仿真一下其他的文件,看看是什么效果。在后4STemWinUCOSIII移面章节中我们讲解STemWin移植STM32开发板上运行,当时讲解的是不带操作系统的移植方法,也就是大家通常说的跑。前面章节中我们还讲解了使用Windows仿真emWin,这个仿真是带系统的,也就是Windows系统。本章带领大家把STemWin移植到带有UCOSIII操作系统的基础工程中。让我们的开发板既有系统又有漂亮的GUI机的移植,带系统的移植也就变得容易多了。本章分为如下几个部实验现STemWin文件到工本章我们需要完成STemWin在UCOSIII上的移植,那么就需要一UCOSIII的基础工程,工程”,我们只需要把此基础工程出来。我们打开这个基础工程,如图4-1-1所示。4-1-1UCOSIII上图红色框起来的就是UCOSIII的驱动程序,大家可以打开这个基础工程看下,需要注意同机移植一样,我们在此基础工程内新建一个文件夹命名为EMWIN,将STemWin文件拷4-1-2图4-1-2STemWin到工打开这个工程,然后添加STemWin文件到工程内,如图4-1-34-1-3添加STemWin添加STemWin文件在机移植的时候已经给大家讲解过每个文件的含义,不过在时候添加的是GUI_X.c文件。EMWIN_LIB工程组中要添加STemWin526_CM3_OS_Keil.lib库文件,之前移植修改工程STmWinUCSIII部分如GUIX_uch_og.、GUCon.、GUIRV_emtecLCDonfFleColr_Tmte.c文件,这些都不需要修改,需要GU_X_COSII.cSTmWin#include"GUI#includeincludesh因为使用UCOSUCOS GLOBALstaticOS_SEM*DispSem; staticOS_SEM*EventSem;staticOS_SEM*KeySem; staticint static TIMING*Notes:SometimingdependentroutinesofuC/GUIrequireaGetTimeanddelayDefaulttimeunit(tick),normallyis1int{OS_ERRreturn }//GUI延时函voidGUI_X_Delay(intperiod)OS_ERRerr;ticks=(period*1000)/OSCfg_TickRate_Hz;}void{}MULTITASKINGINTERFACENote(1):1)ThefollowingroutinesarerequiredonlyifuC/GUIisusedinatruemultitaskwhichmeansyouhavemorethanonethreadusingtheuC/GUIAPI.Inthiscasethe needstobeinGUIConfvoid{OS_ERROSSemCreate((OS_SEM* (OS_ERR*OSSemCreate((OS_SEM* (OS_ERR*}void{OS_ERR }void{OS_ERR }U32GUI_X_GetTaskId(void){return((U32)(OSTCBCurPtr->Prio));//获取任务优先级,也就是任务}void{OS_ERR }void{OS_ERR }KEYBOARDINTERFACEPurpose:ThekeyboardroutinesarerequiredonlybysomeIfwidgetsarenotused,theymaybeNote(s):IfuC/OS-IIisused,characterstypedintothelogwindowwillbeced Thisisaneatfeaturewhichallowsyoutooperateyourtargetsystemwithouthavingtouseeventohaveakeyboardconnectedtoit.(usefulfordemosstaticvoid{ DEF_FALSE){ }}void{OS_ERROSSemCreate((OS_SEM* (OS_ERR*}int{intr=KeyPressed;return(r);}int{intr;{ }r=KeyPressed;KeyPressed=0;return(r);}voidGUI_X_StoreKey(int{OS_ERRerr;KeyPressed=k; }在机移植的时候我们也给STemWin提供了一个系统时钟,使用的是定时器3定时1ms1msUCOSIII1ms具体如图4-2-1所示。GUI_OS1STemWin务的最大数目,默认我们设置为5个任务数。修改配置如下:#define (1)//#define (5)//EMWIN添加STemWinDemo测至此,我们整个移植修改内容就完成,接下来就把STemWin提供的Demo加载到我们的工程中,并包含对应的头文件4-3-1图4-3-1添加开始任务start_task,然后需要有调用触摸的任务,还需要有执行STemWinDemo的任务,为了能够反应系统是否运行,使用了一个led闪烁任务作为指示。在开始任务中将STemWin进行初始化及创建其他3个任务。具体代码可以看我们工程中main.c文件,如下#include"systemh"#include"SysTick.h"#include"usart.h"#include"ledh"#include"keyh"#include"beeph"#include"lcd_driverh"#include"touchh"#include"flash.h"#include"sram.h"#include"malloc.h"#include"includesh"#include"GUIh"#define #define OS_TCBvoidstart_task(void#define #define OS_TCB//touchvoidtouch_task(void#define #define OS_TCB//led0voidled0_task(void//EMWINDEMO任#define #define OS_TCBvoidemwindemo_task(voidint{OS_ERRerr; //初始化SRAM OS_CRITICAL_ENTER();//进入临界区 *)&StartTaskTCB, (CPU_CHAR*)"starttask", (OS_TASK_PTR) *)0, *)&START_TASK_STK[0], (OS_MSG_QTY)0, 消息数目,为0时接收消息 项
* //用户补充的 * OSStart(&err);//开启UCOSIII}voidstart_task(void{OS_ERRerr;p_arg=#ifOS_CFG_STAT_TASK_EN> #ifdefCPU_CFG_INT_DIS_MEAS_EN OS_CFG_SCHED_ROUND_ROBIN_EN当使用时间片轮转的时 //STemWinOS_CRITICAL_ENTER();//进入临界//STemWinDemo (OS_TASK_PTR)emwindemo_task, (OS_MSG_QTY)0, (OS_TASK_PTR)touch_task, (OS_MSG_QTY (OS_TASK_PTR)led0_task, (OS_MSG_QTY)0, }//EMWINDEMO任voidemwindemo_task(void{{}}voidtouch_task(void{{}}voidled0_task(void{{l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家政职业心态培训课件
- 培训演讲力课件
- 2024年普外科护士长总结
- 2024年倍的认识课件(9篇)
- 《大数据应用技术基础》课件2.1.2HDFS及使用
- 企业安全专业知识培训课件
- 人身安全课件小学
- 2025 小学一年级数学下册复习课(全册要点)课件
- 测控电路(第7版)课件:执行器控制与驱动电路
- 【初中 地理】第六章第二课时 四大地理区域课件 2025-2026学年地理人教版八年级下册
- 太阳能路灯可行性研究报告
- 中国工艺美术馆招聘笔试试卷2021
- DB32T 3695-2019房屋面积测算技术规程
- GB/T 7044-2013色素炭黑
- GB 8270-2014食品安全国家标准食品添加剂甜菊糖苷
- T∕CCCMHPIE 1.44-2018 植物提取物 淫羊藿提取物
- 湖北省高等教育自学考试
- (完整word版)Word信纸(A4横条直接打印版)模板
- 中心卫生院关于成立按病种分值付费(DIP)工作领导小组及制度的通知
- 测试算例-各向同性湍流DNS
- 五年级上册数学课件 口算与应用题专项 人教版(共64张PPT)
评论
0/150
提交评论