[原创] emWin5.22在STM32上移植

dj狂人   2015-5-19 16:59 楼主
emWin5.22在STM32上移植
(PS:此文档适用于TFT液晶屏使用FSMC方式进行数据传输的例程,其它的仅起参考作用)
STemWin是什么这里就不介绍了,大家看图吧
IMG_20150519_130955.jpg IMG_20150519_131145.jpg IMG_20150519_131148.jpg IMG_20150519_131159.jpg IMG_20150519_131212.jpg IMG_20150519_131316.jpg IMG_20150519_131333.jpg IMG_20150519_131400.jpg
怎么样,炫吧,哈哈
不扯太多,直入主题吧!
首先这次移植需要的材料:
STemWin5.22->链接:http://pan.baidu.com/s/1o6sqxCm密码:9y76
STemWin5.12用户手册->链接:http://pan.baidu.com/s/1mgta0I0密码:49n4
这两份资料是我共享到百度云的,当然也可以去官网下载(建议不去,太慢了,我下的时候几十K每秒,不懂是不是我网速的原因)。
STemWin5.22官网下载链接:
资料下好之后,那么接下来我们进行移植。
首先我们要有一块开发板、TFT液晶屏。相信有开发板的基本都带有例程,那么我们从中随便选一份TFT液晶屏的例程出来(要
保证这份程序能驱动你的液晶屏让屏能正常显示,因为有些可能是板子和屏是分开买的,板子配套的例程不适合屏)。然后看一下
TFT液晶屏驱动函数所在文件是不是“LCD.C”和“LCD.h”(不区分大小写),如果不是下面这步可不管,如果是的话就修改文件名,
修改成什么无所谓(我的修改成ILI93xx.C和ILI93xx.H),只要不是“LCD.C”、“LCD.H”即可(这一步比较重要,因为STemWin
的库中有一个“LCD.h”的头文件)。这一步完成之后接下来我们开始把STemWin5.22加入工程项目中。
首先我们在下好的emWin资料中的以下目录下
emWin\stemwin\STemWin_Library_V1.1.2\Libraries”会找到一个名为“STemWinLibrary522”的文件夹:
_F}QZF98)E6H%O9OFN@SXIT.jpg
把这个文件夹复制到我们的工程目录下,然后在工程项目组中为其新建一个分组,如下:
M~}TV$JIO[3C93JD4D6RS75.png 如图中所示,把这四个文件添加进来,他们所在路径分别为:
1、 GUI_X.C -> “STemWinLibrary522\OS”
2、 GUIConf.c和LCDConf_FlexColor_Template.c->“STemWinLibrary522\Config”
3、 STemWin522_CM3_Keil.lib -> “STemWinLibrary522\Lib”
4、
接着把“STemWinLibrary522”中所有的头文件路径包含进去。以上几步完成之后接下来就开始进行部分的程序修改了。
首先我们点开“GUIConf.C,会在里面看到这样一个宏:
” #define GUI_NUMBYTES 0x200000”
把“0x200000”改为“1024*50”即可(这个宏定义服务于在函数中向系统申请一个静态空间 aMemory ,接着调用 emWin的库函数GUI_ALLOC_AssignMemory 把该空间分配给 emWin。还有“1024*50”并不是定值,我们也可以改成“1024*40”或其它,视情
况而定,但一般建议设置成小于“1024*50”)。然后在“GUIConf.C”中就没有需要修改的了。
接着我们点开“LCDConf_FlexColor_Template.c”,在这个 .C 文件中我们先把TFT液晶驱动的头文件添加进来(如我的是#include “ILI93xx.h”)。接下来我们会看到里面有这样的四个函数void LcdWriteReg(U16 Data)、voidLcdWriteData(U16 Data)、void LcdWriteDataMultiple(U16 * pData, int NumItems)、voidLcdReadDataMultiple(U16 * pData, int NumItems) 然后像下面那样分别添加一句语句:
  1. static void LcdWriteReg(U16 Data)
    {
    // ... TBD by user
    ILI93xx_REG = Data;
    }
    static void LcdWriteData(U16 Data)
    {
    // ... TBD by user
    ILI93xx_RAM = Data;
    }
    static void LcdWriteDataMultiple(U16 * pData, int NumItems)
    {
    while (NumItems--)
    {
    // ... TBD by user
    ILI93xx_RAM = *pData++;
    }
    }
    static void LcdReadDataMultiple(U16 * pData, int NumItems)
    {
    while (NumItems--)
    {
    // ... TBD by user
    *pData++ = ILI93xx_RAM;
    }
    }
注意,上面新添加的ILI9341_REG ILI9341_RAM是根据我的TFT驱动文件中确定的,在我的驱动文件中它们俩
都是一个宏,原型为:
  1. #define ILI93xx_REG *(__IO uint16_t *)(0x6C000000)
    #define ILI93xx_RAM *(__IO uint16_t *)(0x6C000002)
ILI9341_REG ILI9341_RAM这两个值大家移植的时候要根据自己驱动文件中相应的宏进行修改。
上面这步完成之后我们再来看这个函数:
  1. void LCD_X_Config(void)
    {
    GUI_DEVICE * pDevice;
    CONFIG_FLEXCOLOR Config = {0};
    GUI_PORT_API PortAPI = {0};
    pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
    LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
    LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; /*这里是进行屏幕显示方向设置,如果这一句注释掉的话,那么你
原来初始化TFT的时候屏的什么方向就是什么方向。PS:如果屏幕显示出现显示反转或者镜像情况,可通过GUI_MIRROR_X、GUI_MIRROR_Y
以及GUI_SWAP_XY 等不同组合进行调整,如GUI_MIRROR_X | GUI_MIRROR_Y 。GUI_MIRROR_Y 等参数的详细介绍请参看用户手册*/
GUIDRV_FlexColor_Config(pDevice, &Config);
  • PortAPI.pfWrite16_A0 = LcdWriteReg;
    PortAPI.pfWrite16_A1 = LcdWriteData;
    PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
    PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
    GUIDRV_FlexColor_SetFunc(pDevice,&PortAPI,GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16); /*这一步
    我们需要修改的是GUIDRV_FLEXCOLOR_F66708这个参数。GUIDRV_FLEXCOLOR_F66708 这个参数的修改要根据你的TFT屏所使用的
    驱动芯片,如我的TFT使用的驱动芯片是“ILI9325”,所以是GUIDRV_FLEXCOLOR_F66708。如果你的是“ILI9341”,那么就改成
    GUIDRV_FLEXCOLOR_F66709 如果是其它型号的驱动芯片则需要查询emWin5.22的用户手册然后进行修改。emWin5.22用户手册
    可在“STemWinLibrary522”文件夹中的“STemWinLibrary522\Documentation”目录下找到,该手册是一份PDF文档,打开之后
    点开查找功能,输入“GUIDRV_FLEXCOLOR_F66709”便可找到,一般在1002页,具体看下图。*/
    }
    W(SYNFAX{(G~4]L0D}ZV%Q5.jpg
    这一步很重要,很多人移植不成功都是在这一步没做好。
    上面的步骤完成之后我们再往下看会找到这样一个函数
    int LCD_X_DisplayDriver(unsigned LayerIndex,unsigned Cmd, void * pData)。在这里我们仅需在
    case LCD_X_INITCONTROLLER: 项中加入我们TFT液晶的初始化函数即可;如我的是这样:
    1. int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData)
      {
      int r;
      (void) LayerIndex;
      (void) pData;
      switch (Cmd)
      {
      case LCD_X_INITCONTROLLER: {
      LCDx_Init(); //添加TFT的初始化函数
      return 0;
      }
      default:
      r = -1;
      }
      return r;
      }
    以上步骤完成之后接下来就简单多了,emWin在运行过程中有时会调用延时之类的函数,为了实现精确定时,我们还
    需要为emWin开一路定时器,这里我们选用StsTick。也即需要我们在mian()函数中加入SysTick_Config(SystemCoreClock /1000);
    来初始化SysTick定时器,而在“stm32f10x_it.c”文件中,我们需要进行这样的修改:
    1. extern __IO int32_t OS_TimeMS; //OS_Time 已在GUI_X.C中声明。
    void SysTick_Handler(void)
    {
    OS_TimeMS ++;
    }
    这些工作完成后我们再回到main()中,在main()中我们需要添加
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE); 函数,注意如果不添加将无法使用emWin.
    然后进行GUI初始化,记得先包含“GUI.h”。如我的程序是这样子的:
    1. #include "stm32f10x.h"
      #include "GUI.h"
      int main(void)
      {
      SysTick_Config(72000);//定时1Ms
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
      GUI_Init();
      GUI_DispString("Hello emWin!");
      }
    程序编译通过之后下载到板子上,移植成功的话会在左上角显示文本“Hello emWin!”。
    IMG_20150517_200645.jpg
    本帖最后由 dj狂人 于 2015-5-19 22:09 编辑

    回复评论 (24)

    点赞
    点赞  2015-5-19 17:35

    代码有点乱,从word复制过来的时候几行代码就剩一行了
    28IUI5P8CVD}~}JABTIJO%H.png
    然后点编辑想修改又成了这样

    2[(9EXS}0J76}BDLAYX43AR.png 好吧我承认Hold不住 “添加代码文字”

    点赞  2015-5-19 17:38

    哈哈,谢谢。
    点赞  2015-5-19 17:39
    迟点再把触摸那部分发出来。这次移植emWin,野火出的“ emWin实战指南”对我帮助很大,还有网上一些把自己的移植经验分享出来的网友。这次衷心感谢所有为开源努力的人


    帖子里讲的不是很详细,这里发一份野火的“emWin实战指南”,希望对大家有帮助

    emWin实战指南.pdf (6.41 MB)
    (下载次数: 3900, 2015-5-19 17:42 上传)

    点赞  2015-5-19 17:43
    拖动鼠标,绿色和红色背景下,正常吗?我的是野火第一代板子,HX8347驱动的液晶屏,其他地方都显示正常,未读鼠标颈托绿色和红色背景时读取的色值不对
    点赞  2015-5-19 22:26
    触摸部分:
    在开始移植之前,我们先来简单了解下电阻屏的工作原理,如图:
    O`EUHB)PMD][O`5}U8KYD`O.png
    电阻屏分两层,中间以绝缘物进行隔离。当我们触摸屏上时,两层互相碰撞,这时如果向 Y 层施加一个电压,
    则在按下时,可以在X+/X-端电极处分别可以测到一个电压。该电压值取决于触摸位置,而利用这两个电压值我们可
    以算出触摸点到X+X-的垂直方向上距离。同理,如果向 X 层施加一个电压,则在按下时,可以在 Y+/Y- 端电极处
    分别测到一个电压从而可求出触摸点到Y+Y-的垂直方向的距离,利用这几个值便可定位触摸点在触摸屏上的位置。 XPXSK4@XG]OW1AW(F0GZTBJ.png 由上可知从触摸检测芯片那得到的原始数值是ADC进采样后的数据,对这些数据进行处理得到的坐标位置便是触
    摸点位置。那么现在我们要做的工作便是通过emWin留出来的接口把我们触摸屏上触摸芯片检测到的原始数据传进去
    给它就可以了。 由用户手册得知emWin提供的四个接口函数分别为:1、GUI_UCH_X_ActivateX这个函数用于向电阻
    屏的X 层施加电压,从而测量出Y 轴的模拟电压数据。2、GUI_TOUCH_X_ActivateY跟上面的函数类似,这个这个函数
    用于向电阻屏的 Y 层施加电压,从而测量出 X 轴的模拟电压数据。3、GUI_TOUCH_X_MeasureX当 emWin 调用完上
    面的GUI_TOUCH_X_ActivateY 开启 X 轴的测量后,紧接着会调用这个函数来读取测量得的X轴触摸数据,然后交由
    emWin 的上层来处理触摸输入。4、GUI_TOUCH_X_MeasureY同上,当 emWin 调用完上面的GUI_TOUCH_X_ActivateX
    开启 Y 轴的测量后,紧接着会调用这个函数来读取测量得的 Y 轴触摸数据。 而这四个函数具体的实现我们直接调
    用我们自己的触摸检测例程中实现相应功能的函数就可以了。比如GUI_UCH_X_ActivateX这个函数用于向电阻屏的 X 层
    施加电压,从而测量出 Y 轴的模拟电压数据。我们都知道施加电压的事情肯定是触摸检测芯片来完成的,而我们需要做
    的事情便是给触摸检测芯片发送一条指令,用这条指令告诉它该做什么事情,然后从它那读回完成该指令后得到的数据。
    再把这个数据传给emWin 让它进行处理。 好,现在我们回到程序中。首先我们先新建一个文件并命名为“GUI_X_Touch_Analog.c”,
    接着从开发板配套的TFT触摸检测例程中把触摸部分抠出来放到工程目录下,记得把相应头文件的路径包含进去。接着
    把以下代码复制到“GUI_X_Touch_Analog.c”中
    1. #include "GUI.h"
      #include "bsp_touch.h"
      void GUI_TOUCH_X_ActivateX(void)
      {
      XPT2046_WriteCMD(CHX); /*注意这里的实现函数仅为示例,具体该放什么函数请根据上述介绍进行修改。当然,
      现在大部分触摸屏使用的触摸屏控制器都是使用XPT2046 芯片,所以如果对这一步移植没有把握的话可以使用后面我上传
      的触摸检测模块(该模块是从野火板子的配套例程上抠下来的)*/
      }
      void GUI_TOUCH_X_ActivateY(void)
      {
      XPT2046_WriteCMD(CHY);
      }
      int GUI_TOUCH_X_MeasureX(void)
      {
      return XPT2046_ReadCMD();
      }
      int GUI_TOUCH_X_MeasureY(void)
      {
      return XPT2046_ReadCMD();
      }
    以上步骤完成后,在emWin 运行时,会通过它的库函数GUI_TOUCH_Exec 按顺序调用
    GUI_TOUCH_X_ActivateX 、 GUI_TOUCH_X_MeasureY 、 GUI_TOUCH_X_ActivateY 、
    GUI_TOUCH_X_MeasureX 驱动接口,达到获取触摸数据的目的,而触摸数据需要定时更
    新,所以 GUI_TOUCH_Exec 函数需要被定时调用,而这一步,我们可以放在Systick 的中断服务函数里,
    每 10ms 调用一次即可。具体实现代码如下:
    1. void SysTick_Handler(void)
      {
      static uint8_t count_time=0;
      OS_TimeMS ++;
      count_time++;
      if (count_time == 10)
      {
      GUI_TOUCH_Exec(); //每 10ms 调用一次,触发调用触摸驱动
      count_time =0;
      }
      }
    配置好基本的驱动接口之后,还要进行触摸校准,在 LCD_Conf_FlexColor_Template.c
    文件中的 LCD_X_Config 函数里添加配置触摸屏方向及触摸校准的配置,具体代码如下:
    1. void LCD_X_Config(void)
      {
      GUI_DEVICE * pDevice;
      CONFIG_FLEXCOLOR Config = {0};
      GUI_PORT_API PortAPI = {0};
      pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
      LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
      LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
      Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X; //modify by fire 竖屏
    GUIDRV_FlexColor_Config(pDevice, &Config);
    PortAPI.pfWrite16_A0 = LcdWriteReg;
    PortAPI.pfWrite16_A1 = LcdWriteData;
    PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
    PortAPI.pfReadM16_A1 = LcdReadDataMultiple;
    GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708,
    GUIDRV_FLEXCOLOR_M16C0B16);
    /*设置触摸原点 */
    GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorXEx(0)) |
    (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) |
    (GUI_SWAP_XY * LCD_GetSwapXYEx (0)));
  • /*设置触摸校准 */
    GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240-1,
    TOUCH_AD_RIGHT ,TOUCH_AD_LEFT );
    GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320-1,
    TOUCH_AD_BOTTOM ,TOUCH_AD_TOP );
    }
    然后在文件前面进行以下宏定义:
    1. #define TOUCH_AD_TOP 3373 //YPhys0
      #define TOUCH_AD_BOTTOM 221 //YPhys1
      #define TOUCH_AD_LEFT 194 //XPhys0
      #define TOUCH_AD_RIGHT 3816 //XPhys1
    接着我们在新建一个文件并命名,命名无具体要求,这里我参照野火的命名其为“GUI_DEMO_Touch.c”,然后键入以下代码:
    1. #include "GUI.h"
      void Touch_MainTask(void)
      {
      GUI_CURSOR_Show();
      GUI_CURSOR_Select(&GUI_CursorCrossL);
      GUI_SetBkColor(GUI_WHITE);
      GUI_SetColor(GUI_BLACK);
      GUI_Clear();
      GUI_DispString("Measurement of\nA/D converter values");
      while (1)
      {
      GUI_PID_STATE TouchState;
      int xPhys, yPhys;
      GUI_TOUCH_GetState(&TouchState); /* Get the touch position inpixel */
      xPhys = GUI_TOUCH_GetxPhys(); /* Get the A/D mesurementresult in x */
      yPhys = GUI_TOUCH_GetyPhys(); /* Get the A/D mesurementresult in y */
      /* Display the measurement result */
      GUI_SetColor(GUI_BLUE);
      GUI_DispStringAt("Analog input:\n", 0, 20);
      GUI_GotoY(GUI_GetDispPosY() + 2);
      GUI_DispString("x:");
      GUI_DispDec(xPhys, 4);
      GUI_DispString(", y:" );
      GUI_DispDec(yPhys, 4);
      /* Display the according position */
      GUI_SetColor(GUI_RED);
      GUI_GotoY(GUI_GetDispPosY() + 4);
      GUI_DispString("\nPosition:\n");
      GUI_GotoY(GUI_GetDispPosY() + 2);
      GUI_DispString("x:");
      GUI_DispDec(TouchState.x,4);
      GUI_DispString(", y:");
      GUI_DispDec(TouchState.y,4);
      /* Wait a while */
      GUI_Delay(100);
      }
      }
    而在main()函数中我们先初始化触摸屏后再调用触摸校准例程,我的具体实现如下:
    1. #include "stm32f10x.h"
      #include "GUI.h"
      #include "bsp_touch.h"
      extern void Touch_MainTask(void);
      int main(void)
      {
      /* 初始化触屏 */
      Touch_Init();
      SysTick_Config(72000);
      RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
      GUI_Init();
      GUI_Delay (20);
      /* 触摸校准 demo */
      Touch_MainTask();
      }
    下面我们看下效果图:
    IMG_20150519_222918.jpg
    注意蓝色字体的此时x值即TOUCH_AD_RIGHT ,y则对应TOUCH_AD_LEFT。
    而用手触摸右下角时x对应TOUCH_AD_BOTTOM,y对应TOUCH_AD_TOP
    IMG_20150519_222942.jpg IMG_20150519_222959.jpg
    本帖最后由 dj狂人 于 2015-5-19 22:55 编辑
    点赞  2015-5-19 22:40

    8楼 dj狂人 

    引用: role_2099 发表于 2015-5-19 22:26
    拖动鼠标,绿色和红色背景下,正常吗?我的是野火第一代板子,HX8347驱动的液晶屏,其他地方都显示正常,未读鼠标颈托绿色和红色背景时读取的色值不对

    估计是设置的不对,上传的那份emWin实战指南看了吗,我记得里面有提到这种情况
    点赞  2015-5-19 22:43

    9楼 dj狂人 

    Touch.zip (7.89 KB)
    (下载次数: 94, 2015-5-19 22:57 上传)

    GUIDEMO_Touch.zip (896 Bytes)
    (下载次数: 103, 2015-5-19 22:59 上传)


    点赞  2015-5-19 22:59

    10楼 role_2099 

    晚上回去再试一下,之前有改过那些设置,应该是还有不对的地方
    点赞  2015-5-20 12:38

    11楼 dj狂人 

    引用: role_2099 发表于 2015-5-20 12:38
    晚上回去再试一下,之前有改过那些设置,应该是还有不对的地方

    “pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);”

    楼上你把这里的是用“GUICC_565”?如果是 换成 “GUICC_M565”试下,不是的话你根据你个驱动芯片对照下手册里的这个表
    _[KM]ARKYQ(9_KSCVQ8302I.png

    点赞  2015-5-20 14:14

    12楼 role_2099 

    引用: dj狂人 发表于 2015-5-20 14:14
    “pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);”

    楼上你把这里的是用“GUICC_565”?如果是 换成 “GUICC_M565”试下,不是的话你根据你个驱动芯片对照下手册里的这个表

    就是用的M565,不然颜色不对



    void LCD_X_Config(void) {

    ……

      Config.FirstCOM = 0;                                          //modify by fire

      Config.FirstSEG = 0;                                          //modify by fire  

            Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X;                                                                //modify by fire 竖屏

    // Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;                                            //modify by fire  横屏               

      Config.NumDummyReads = 2;                                     //modify by fire 读取的第二个数据才是真实数据       




    野火的要读第二次才正确,我的如果设置为2,就不止红绿色拖尾了,其他颜色也拖尾,所以我设置为1

    点赞  2015-5-21 22:00

    13楼 dj狂人 

    引用: role_2099 发表于 2015-5-21 22:00
    就是用的M565,不然颜色不对



    void LCD_X_Config(void) {

    ……

      Config.FirstCOM = 0;                                          //modify by fire

      Config.FirstSEG = 0;                                          //modify by fire  

            Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X;                                                                //modify by fire 竖屏

    // Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;                                            //modify by fire  横屏               

      Config.NumDummyReads = 2;                                     //modify by fire 读取的第二个数据才是真实数据        




    野火的要读第二次才正确,我的如果设置为2,就不止红绿色拖尾了,其他颜色也拖尾,所以我设置为1

    嗯,他那个是以ILI9341为例讲的,我们移植的时候要根据自己的驱动芯片多做修改,至于怎么改还得看数据手册。

    像我的驱动芯片是 9325,

    “Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X;      //modify by fire 竖屏”  这个参数我压根就没设置,不然会出现显示镜像,

    还有“Config.NumDummyReads = 2; ”这个我这里感觉设不设置都没影响,不过我的添加官方的那个演示例程的时候一直出问题,不是

    显示卡在某处就是一触摸就emWin不工作了。



                                        

    点赞  2015-5-22 10:49

    14楼 role_2099 

    引用: dj狂人 发表于 2015-5-22 10:49
    嗯,他那个是以ILI9341为例讲的,我们移植的时候要根据自己的驱动芯片多做修改,至于怎么改还得看数据手册。

    像我的驱动芯片是 9325,

    “Config.Orientation = GUI_MIRROR_Y|GUI_MIRROR_X;      //modify by fire 竖屏”  这个参数我压根就没设置,不然会出现显示镜像,

    还有“Config.NumDummyReads = 2; ”这个我这里感觉设不设置都没影响,不过我的添加官方的那个演示例程的时候一直出问题,不是

    显示卡在某处就是一触摸就emWin不工作了。



                                        

    你说的显示卡在某处是不是堆栈设置太小了,我的就是,移植完卡住了,把堆栈改大就显示正常了
    点赞  2015-5-24 17:15

    15楼 dj狂人 

    引用: role_2099 发表于 2015-5-24 17:15
    你说的显示卡在某处是不是堆栈设置太小了,我的就是,移植完卡住了,把堆栈改大就显示正常了

    刚开始我也以为是这个问题,后面在40~60K范围都试了下,设58的效果最好,不过设的大了触摸没反应,设小了只能触摸一次,完了就卡住了。



    不过单独触摸测试的话是可以的,不懂是不是我程序的原因
    点赞  2015-5-24 21:20

    16楼 zhaojun_xf 

    触摸部分确实需要设置大一点的堆栈空间。
    我的博客
    点赞  2015-5-25 10:33

    17楼 glcd 

    【能接emWin的SPI串口屏】
    GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷!
    emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。
    更多介绍请看:www.neqee.com
    精美、便捷的emWin界面设计-GLCD(图形屏)
    点赞  2016-7-12 16:42

    18楼 汤权 

    正在弄emwin,经验我学习了
    亚里士缺德
    点赞  2017-9-26 10:31

    19楼 cchhxd 

    正在学,谢谢了
    点赞  2017-10-15 17:09

    20楼 betbet 

    谢谢分享
    点赞  2018-3-16 22:25
    12下一页
    最新活动
    报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
    30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
    安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
    免费申请 | 上百份MPS MIE模块,免费试用还有礼!
    PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
    2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
    随便看看
    MSP430F149单片机,串口通信
    请教:关于LSD-MSP430PRGS-IIIA编程器
    请教:Quartus6.0中打开SOPC打不开,出现at.java.awt....(Unknown Source)
    Keil常见错误/警告及解决方法
    C8051F版数字湿度计调试2---硬件调试完成,OLED可显示了!
    PCB距离规则问题
    配置寄存器
    nowECC v2.17 使用疑问,芯片TMS570LS1227-144脚
    MSP430F5529时钟详解
    关于pic的IIC通信写地址问题
    闻烟识爱车 从尾气冒烟判断爱车故障
    protel DXP2004 如何批量修改标识符?
    为什么RegDeleteKey()删除不了注册表项了
    如何将别人设计好的Cadence原理图中的原理图库导出来
    求助
    嵌入式设备中支持国密算法的方法
    用过新华龙C8051F020开发板的进
    探讨:5G、物联网,动了你的奶酪了吗?
    出MSP430、CH376等一批杂物
    有奖技术直播:Keysight量子计算测量方案研讨会(9月20日上午10点,看直播抽好好礼)
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复
    收藏