【E960】最新STemWin5.22移植笔记(超详细)

2021-09-09 20:14:29      索炜达电子      898     

项目编号:E960

文件大小:75M

源码说明:带中文注释

开发环境:C编译器

简要概述:

STemWin5.22移植笔记

网上关于emwin的资料很少,我在移植的时候查了很多资料,对我一个感觉是好乱,有的代码改动的太多,这会让像我这种菜鸟无从下手,并且来源很乱,这让我决心写下这个笔记,来让新手快速入门emwin,高手当然飘过哦,这只限于我这种菜鸟罢了。

emWin是segger公司出的一款图形化界面,非常好看,大家所熟悉的ucGUI也是这个公司开发的,ucGUI是XP的,而emWin是win7哦!而移植也要比ucGUI简单的多,没有ucGUI那么麻烦。好废话少说,如正题。

 1、获取库文件

首先,emWin库来源有两个,一个是MDK(KEIL)软件目录下的,另外一个是ST公司的emWin,这里我们用第二个,因为MDK目录下的emWin最新版本对于大家不是好获得(MDK5.0才是5.22,MDK4.7下是5.16的),而ST公司的那个好下载。http://www.st.com/web/en/catalog/tools/PF259225# 这个是下载地址哦,目前最新的是5.22的版本,打开页面,点击下面的Download,即可下载。

解压缩下载的压缩包,打开文件夹,我们看到

【E960】最新STemWin5.22移植笔记(超详细)

Libraries :里面就有我们需要的STemWin库

Project:这个是ST的工程文件,以官方的eval板子建的工程

Utilities: 这个是文件系统和eval板子的硬件驱动程序

我们打开Libraries文件夹,看到StemWinLibrary522了,先莫激动,这个我们先到这里。

【E960】最新STemWin5.22移植笔记(超详细)

2、库文件加到工程里

    首先,我们借用原子的触摸程序(战舰的哦),先将前面找到的库文件夹复制到工程文件夹下,  注意:工程里的lcd.c和lcd.h改为ili93xx.c和ili93xx.h后重新加入到工程里,LCD_Init()也改为LCDx_Init()

下面的程序由ili93xx.h中剪切到ili93xx.c中,至于为什么做以上工作,移植过ucGUI的再知道不过了,这里就不多说了,不知道的可以百度哦。

typedef struct

{

         u16 LCD_REG;

         u16 LCD_RAM;

} LCD_TypeDef;                     

#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))

#define LCD             ((LCD_TypeDef *) LCD_BASE)

如图:

【E960】最新STemWin5.22移植笔记(超详细)

接下来就是拿出你的剪刀了,首先把主程序里的触摸都剪掉,剩下下面的就行啦!

int main(void)

 {     

         u8 i=0;        

         delay_init();                              

         NVIC_Configuration();     

         uart_init(9600);                       

LED_Init();                            

        LC。Dx_Init();

         KEY_Init();              

        POINT_COLOR=RED;      

while(1)

         {

          

                   i++;

                   if(i==20)

                   {

                            i=0;

                            LED0=!LED0;

                   }delay_ms(20);

         }

}

接着就是把文件加到工程你去那,下图是工程截图:

【E960】最新STemWin5.22移植笔记(超详细)

红框中间的三个文件路径:STemWinLibrary522\Config

GUI_X.c 的路径 :  STemWinLibrary522\OS

接下来就是emWin的库啦,哈哈,打开Lib文件夹,看到那么多的文件,是不是晕了,我们仔细看看,ST给M0 M3 M4的都分配了库,还很了编译软件和有无系统的,简直是分的很好,显然我们用STemWin522_CM3_Keil.lib 这个库,好了,工程就到此就弄好了。

3、修改程序,启动emWin

   接下来的工作就麻烦点喽,大家淡定点,其实也就一会儿的功夫喽!

    首先动GUIConf.c中的GUI_NUMBYTES 为1024*50,50可以小点,不要太大,太大编译器会编译会错误的,

接下来是LCDConf_FlexColor_Template.c 这个文件,先将我们的ili93xx.h头文件包含进来,接下来加入以下两行程序,至于后面的地址为什么会这样,这是LCD显示里的哦

#define LCD_REG_ADDRESS              *(__IO uint16_t *)(0x6C000000)

#define LCD_DATA_ADDRESS          *(__IO uint16_t *)(0x6C000800)

 

     再就是下面的几个程序

static void LcdWriteReg(U16 Data) {

  // ... TBD by user

         LCD_REG_ADDRESS=Data;

}

static void LcdWriteData(U16 Data) {

  // ... TBD by user

         LCD_DATA_ADDRESS=Data;

}

 

static void LcdWriteDataMultiple(U16 * pData, int NumItems) {

  while (NumItems--) {

    // ... TBD by user

                   LCD_DATA_ADDRESS=*pData++;

  }

}

 

static void LcdReadDataMultiple(U16 * pData, int NumItems) {

  *pData = LCD_DATA_ADDRESS;

         while (NumItems--) {

    // ... TBD by user

                   *pData++=LCD_DATA_ADDRESS;

  }

}

 

  此时重要的函数来喽void LCD_X_Config(void)

   Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;

  这句是显示方向的,默认的是这个,弄好后,下进去板子,看是否正常显示,不正常显示可以试试该这里哦。PS:9341的能行,但是6804的不行,看哪位能解决哦!

 

GUIDRV_FlexColor_SetFunc(pDevice, &【E960】最新STemWin5.22移植笔记(超详细)ortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);

 

GUIDRV_FLEXCOLOR_F66709这个东西很重要,有很多可以选的,太多了就不列在这儿了。移植的时候我就栽在这里啦,这是对控制芯片的支持,详细的请看最新手册5.22的(P991),也有中文的5.12,不过5.22支持的很多.

 

   最后就是main函数喽

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);

         GUI_Init();

         GUI_DispString("Hello STemWin!");

  记住这句一定要加上RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);      不知道是为什么,大家加上就行喽,哈哈,现在编译把程序下到板子里去哦,哈哈 是不是成功显示了。 来张照片。哈哈,先歇会儿,后续再写上demo的和触屏的。

【E960】最新STemWin5.22移植笔记(超详细)

哈哈,来喽,大家再关注哦!demo和触屏的献上啦

4、加入demo,让emWin炫起来

首先,工程文件加入demo的文件,如下图

【E960】最新STemWin5.22移植笔记(超详细)

加入头文件gui_demo.h    然后再主函数里加入GUIDEMO_Main(); 好,编译程序,下进去,惊喜吗?看到经典的开始画面了,但是没有动,右下脚没有像别人的视频里的滚动啊!哈哈,莫急,因为我们还没有启动emWin的心跳哦!

有的是用systick,但是我没有实验成功,而是用定时器用的,其实都是一样,在HARDWARE里加入gui_time.c和gui_time.h文件,具体源码见工程喽,其实就是循环调用OS_TimeMS++;让emWin跳动起来。别忘了,主函数要调用定时器的初始化哦!我们再编译,程序跑起,哈哈,是不是动了。

欸,但是还有个问题,怎么就是一个画面,不往下去了呢?这是我们还没有开启demos的开关了,打开GUIDEMO.h文件,配置如下图,记住后面每个项目的开关要关掉很多的,不然会有错误的。我开了8个,到黑圈那里就好了。

【E960】最新STemWin5.22移植笔记(超详细)

再跑起程序,哈哈,这回就真的动了。高兴啊,见到win7风格的画面,我为以后的界面充满了信息。

 

5、启动touch,人机界面更美好

  这是我们移植的最后一步啦,我们先看中文手册上是怎么说的(P765),见下图

【E960】最新STemWin5.22移植笔记(超详细)

那我们就按照这个步骤来喽。首先是硬件程序,由于我们用的5.22版本没有关于touch的C文件,我便从5.16那儿拷过来了GUI_X_Touch_Analog.c,把这个文件加入到StemWin5.22组里,因为直接就用的原子的触摸了,我们就直接调用TP_Read_XY2(&x,&y);这个函数,把他放进GUI_TOUCH_X_MeasureX(void)和GUI_TOUCH_X_MeasureY(void)这两个函数里,其实最后由这个函数GUI_TOUCH_Exec()循环调用,来一直读AD的值。哦,说到这儿,把GUI_TOUCH_Exec()这个函数也要放进前一步建的gui_time.c文件里,具体见源码喽!这就把前两步弄完了。

第三步没搞过,直接第四步吧。用示例确定校准值??迷惑,哪里的示例,怎么确定,哈哈,听我一步步说来。这里的值就是取得A/D转换器的最小值和最大值。emWin需要用这些值来把测量结果转换为以像素表示的触摸位。这4个值为:

【E960】最新STemWin5.22移植笔记(超详细)

emWin的示例文件夹中有一个小程序,可用来获取触控面板的这些值。该程序位于文件夹Sample\Tutorial下,程序名称为TOUCH_Sample.c。在硬件上运行该示例。其输出应类似于下侧的屏幕截图。

【E960】最新STemWin5.22移植笔记(超详细)

 接下来我们在LCDConf_FlexColor_Template.c文件中加入上面提到的四个值

#define TOUCH_AD_TOP                         221

#define TOUCH_AD_BOTTOM                   3900

#define TOUCH_AD_LEFT                         160

#define TOUCH_AD_RIGHT                       3883

后面的数字只是临时写的,然后我们再新建gui_touch.c文件,这就是TOUCH_Sample.c文件的程序,我们拷贝过来到gui_touch.c中,如下图所示

【E960】最新STemWin5.22移植笔记(超详细)

然后下载程序,界面如下图

【E960】最新STemWin5.22移植笔记(超详细)

这是确定左上角的值,记住,一定要触摸,蓝色的X就是TOUCH_AD_LEFT的值,Y就是TOUCH_AD_TOP的值,然后下一张

【E960】最新STemWin5.22移植笔记(超详细)

同样触摸右下角,看到十字会移动到右下角,这是蓝色X的值为TOUCH_AD_RIGHT,Y值为TOUCH_AD_BOTTOM,这样,前面提到的四个值就已经确定了,同时改掉LCDConf_FlexColor_Template.c里的那四个值。


最后一步啦,哈哈,见下图,在LCD_X_Config函数里调用GUI_TOUCH_Calibrate函数,这样,我们的触屏移植就弄完了。

【E960】最新STemWin5.22移植笔记(超详细)

弄了好久了,寒假就开始了,到现在触屏终于可以啦,哈哈 ,发这个帖子也祝贺自己一下喽,哈哈,大神们指点意见哦!

附件有:
1、5.22英文手册和5.12的中文手册,

2、前面的basic工程和后面的demo+touch的工程,

3、pdf格式的移植笔记,

4、emWin5.16-MDK和emWin5.22-MDK是MDK安装目录下的emWin库,分别是5.16和5.22的,

5、SeggerEval_WIN32_MSVC_MinGW_GUI_V522是VC6.0可以仿真的库。

目录│文件列表:

 └ 移植笔记

    │ emWin5.12用书手册中文版本.pdf

    │ emWin5.16-MDK.rar

    │ emWin5.22-MDK.rar

    │ emWin5.22_Basic-战舰.rar

    │ emWin5.22_Demo+Touch-战舰 -.rar

    │ emWin5.22英文.pdf

    │ SeggerEval_WIN32_MSVC_MinGW_GUI_V522.rar

    │ STemWin5.22移植笔记.pdf

    └ STemWinLibrary522.rar

TAGSTemWin
  • 3 次
  • 1 分