完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前micrium官网ucgui版本是v5.26Trial版本,无源代码,只有lib文件,现在网上流传最多的源码是ucgui3.90或3.98版本的,这些源码没有完整官方版本。emWin是segger公司的,segger与ST等公司都有合作,使用ST的芯片可以免费使用emWin,STemWin:http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1734/PF259225?s_searchtype=partnumber,目前版本是5.22。
移植环境:
其中Libraries中就有emWin: Config是emWin配置文件 Documentation是Segger公司的用户手册 inc是头文件 Lib是将源码封装成的lib OS是带OS和不带OS的GUI文件 Software里有一些跟图片、字体相关的实用小工具 我们可以将整个STemWin_Library_V1.1.2放入我们的Keil工程中,然后加入以下4个文件:
typedef struct{ u16 LCD_REG; u16 LCD_RAM;} LCD_TypeDef;//0x6C000000 | 0x000007FE 就是相应的FSMC的地址#define LCD_BASE ((u32)(0x6C000000 | 0x000007FE))#define MYLCD ((LCD_TypeDef *) LCD_BASE)12345678接下去来到函数LCD_X_Config() void LCD_X_Config(void) { …… // Orientation // 这里可以利用GUI_SWAP_XY,GUI_MIRROR_Y,GUI_MIRROR_X来改变方向 Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; // Set controller and operation mode //不同的LCD驱动IC,F66709这个编号也会不一样具体查看手册1002页 //M16C0B16代表16bpp, no cache, 16 bit bus …… GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);}123456789101112接下去来到 int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) { …… switch (Cmd) { case LCD_X_INITCONTROLLER: { MYLCD_Init();//在这里加入自己的LCD初始化程序 return 0; } default: r = -1; } return r;}123456789101112emWin在运行过程中会调用延时之类的函数,为了实现精确定时,我们还需要为emWin开一路定时器,这里我们选用SysTick。在mian()函数中加入SysTick_Config(),来初始化SysTick定时器,而在SysTick_Handler中断函数中,我们需要进行这样的修改: extern __IO int32_t OS_TimeMS; //OS_Time 已在GUI_X.C中声明。void SysTick_Handler(void){ OS_TimeMS++;}12345OS_TimeMS已经在GUI_X.c中定义。 这些工作完成后我们再回到main()中,在main()中我们需要添加 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);函数,注意如果不添加将无法使用emWin。然后进行GUI初始化,记得先包含“GUI.h”。如我的程序是这样子的: #include "stm32f10x.h"#include "GUI.h"#include "core_cm3.h"#define TICKS_PER_SEC 1000int OS_CPU_SysTickClkFreq(void){ return 72000000; }int main(void){ SysTick_Config(OS_CPU_SysTickClkFreq()/TICKS_PER_SEC-1); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); GUI_Init(); GUI_DispString("Hello emWin!"); while(1) { }}12345678910111213141516171819202122接下来我们加入触摸的部分,这部分我们需要写4个函数: GUI_TOUCH_X_ActivateX(), GUI_TOUCH_X_ActivateY() GUI_TOUCH_X_MeasureX(), GUI_TOUCH_X_MeasureY() //这里返回的y值是AD采样的值int GUI_TOUCH_X_MeasureX(void) { u16 x,y; TP_Read_XY(&x,&y); return y;}//这个写个空函数就可以了void GUI_TOUCH_X_ActivateX(void){}12345678然后我们需在LCDConf_FlexColor_Template.c文件中加入对触摸屏的校准 //这4个宏定义是屏幕的四个角的AD值#define TOUCH_AD_TOP 221#define TOUCH_AD_BOTTOM 3900#define TOUCH_AD_LEFT 160#define TOUCH_AD_RIGHT 3883GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240, TOUCH_AD_TOP, TOUCH_AD_BOTTOM);GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); |
|
|
|
只有小组成员才能发言,加入小组>>
791 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2710 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1071浏览 3评论
193浏览 2评论
456浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:21 , Processed in 0.937761 second(s), Total 46, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号