打印

百为STM32开发板UCGUI移植步骤(3.5固件库+UCOSII2.92+UCGUI3.90)

[复制链接]
6663|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xi_liang|  楼主 | 2013-10-22 10:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
百为STM32开发板UCGUI移植步骤(3.5固件库+UCOSII2.92+UCGUI3.90)

一、UCOS移植
这个可以参考“百为STM32开发板UCOSII移植步骤”
参考源码——百为STM32_3.5固件库_uCOS2.92源码.rar
工程目录图:


二、UCGUI移植
1、下载UCGUI3.90源码
首先下载UCGUI3.90源码,注意网上流传的很多UCGUI代码有问题。具体可以参考这个帖子:

完整源码版uCOSII2.86+uCGUI3.90在stm32上的移植,含uCGUI3.9源码(不是.lib)
http://www.amobbs.com/thread-4787247-1-1.html

2、然后在工程里add groud创建组,把UCGUI代码加进工程


把创建的New Group组改名为uCGUI/Config
用同样的方法创建uCGUI/GUI_X,uCGUI/LCDDriver等组,
然后把UCGUI390a\Start目录下的对应目录C文件添加到对应的组上

建立组uCGUI,然后把UCGUI390a\Start\GUI目录下的所有目录C文件添加到该组上
这里创建组是为了阅读方便,不是必需的。建立好后的目录结构如下:


3、增加LCD驱动接口LCDDriver.c
实现UCGUI的LCD接口,主要是实现下面LCD_L0_XXXX这些函数,因为上层画点画线画图形最终调用的都是这些函数:
   LCD_L0_Init,
    (tLCDDEV_DrawBitmap*)LCD_L0_DrawBitmap,
    LCD_L0_DrawHLine,
    LCD_L0_DrawVLine,
    LCD_L0_FillRect,
    LCD_L0_GetPixelIndex,
    LCD_L0_SetPixelIndex,
    LCD_L0_XorPixel,
    LCD_L0_SetLUTEntry,

但最简单的方法不是每个函数重新去编写,按照LCDWin.c来修改比较快,
在LCD_L0_Init初始化时增加调用9320 LCD初始化代码STM3210E_LCD_Init();
把LCDSIM_SetPixelIndex改名为ili9320_SetPixelIndex
把LCDSIM_GetPixelIndex改名为ili9320_GetPixelIndex

然后在底层ili9320_lcd.c里增加以下三个函数
void ili9320_SetPixelIndex(u16 Xpos, u16 Ypos, u16 c)
{

  LCD_SetCursor(Xpos, Ypos);
  LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
  LCD_WriteRAM(c);

}

u16 ili9320_GetPixelIndex(u16 Xpos, u16 Ypos)
{
  u16 c;
  LCD_SetCursor(Xpos, Ypos);
  c = LCD_ReadRAM();  //在这个函数里,注意9320 LCD的读GRAM需要读两次,第一次为无效数据,第二次才是有效数据,具体可以看9320数据手册
  return(ili9320_BGR2RGB(c));
}

u16 ili9320_BGR2RGB(u16 c)
{
  u16 r,g,b;
  u16 rgb;
  b = (c>>0) & 0x1f;
  g = (c>>5) & 0x3f;
  r = (c>>11) & 0x1f;
  rgb = (b<<11) + (g<<5) + (r<<0);
  return( rgb );
}

4、在GUI_X_Touch.c里增加触摸驱动接口
主要是实现读触摸坐标的两个函数:
int  GUI_TOUCH_X_MeasureX(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_X();
  }
        
  return j/10;
}

int  GUI_TOUCH_X_MeasureY(void) {
  U32 i,j=0;
  for(i=0;i<10;i++)
  {
    j+=SPI_TOUCH_Read_Y();
  }
        
  return j/10;
}

#define TOUCH_X_MeasureX   GUI_TOUCH_X_MeasureX
#define TOUCH_X_MeasureY   GUI_TOUCH_X_MeasureY

在GUI_TOUCH_Exec里面会默认调用上面两个函数采样坐标并转换,然后调用_StoreUnstable -> GUI_TOUCH_StoreUnstable ……
-> GUI_PID_StoreState存储触摸按下状态。

然后在WM_Exec -> WM_Exec1里会调用 WM_pfHandlePID -> WM_HandlePID - > GUI_PID_GetState获取出触摸按下状态并发送到相应窗口处理

在app.c里增加一个UCOS任务,在里面不断地调用GUI_TOUCH_Exec处理触摸消息
static  void  Task2_Func (void *p_arg)  //Task2_Func这个是用户自己创建的任务名,可以改为任意名字
{
    ……

    while (DEF_TRUE) {
    ……
    GUI_TOUCH_Exec();
    OSTimeDly(20);
    }
}

5、在GUI_X_uCOS.c里增加UCOS和UCGUI之间的接口:

void GUI_X_ExecIdle (void)
{
    OS_X_Delay(1);
}
改为
void GUI_X_ExecIdle (void)
{
    GUI_X_Delay(1);
}

实现下面几个空函数,作为打印调试信息等用途
void GUI_X_Log(const char *s)
{

}

void GUI_X_Warn(const char *s)
{

}

void GUI_X_ErrorOut(const char *s)
{

}

6、增加UCOS任务,在里面调用UCGUI DEMO任务MainTask:
static  void  User_Task_Func (void *p_arg)  //User_Task_Func这个是用户自己创建的任务名,可以改为任意名字
{
    ……
   
    while(1)
    {
        MainTask();
    }
}

MainTask任务如下,使用UCGUI前先调用 GUI_Init初始化UCGUI,然后运行UCGUI DEMO:

void MainTask(void) {
  GUI_Init();
  while(1) {
    GUIDEMO_main();  //这个函数可以改为自己的应用程序,这样就是最简单的UCGUI应用程序了
  }
}

但要注意的是UCOS的任务,都必须要有OSTimeDly等延时函数,这样其他任务才能被调度
所以这里的
  while(1) {
    GUIDEMO_main();  //这个函数可以改为自己的应用程序,这样就是最简单的UCGUI应用程序了
  }
并不是简单的while死循环,在GUIDEMO_main函数里是有简接调用OSTimeDly的,比如GUI_Delay,GUI_X_Delay等

--------------------------------------------------  完 ---------------------------------------------------------
沙发
outstanding| | 2013-10-22 10:48 | 只看该作者

使用特权

评论回复
板凳
xi_liang|  楼主 | 2014-5-7 21:58 | 只看该作者
outstanding 发表于 2013-10-22 10:48

谢谢你帮顶了不少帖子:handshake

使用特权

评论回复
地板
outstanding| | 2014-5-8 08:59 | 只看该作者
xi_liang 发表于 2014-5-7 21:58
谢谢你帮顶了不少帖子

客气了

使用特权

评论回复
5
xi_liang|  楼主 | 2014-5-15 23:41 | 只看该作者
图居然看不到了:L

使用特权

评论回复
6
SLHSu37| | 2014-5-16 08:25 | 只看该作者
xi_liang 发表于 2014-5-15 23:41
图居然看不到了

是捏,图看不到了···

使用特权

评论回复
7
xi_liang|  楼主 | 2014-5-16 18:40 | 只看该作者
SLHSu37 发表于 2014-5-16 08:25
是捏,图看不到了···

:lol

使用特权

评论回复
8
xuan309170083| | 2014-5-16 21:40 | 只看该作者
支持

使用特权

评论回复
9
碧云天书| | 2014-5-18 11:42 | 只看该作者
很好,支持

使用特权

评论回复
10
sflower| | 2014-5-19 11:40 | 只看该作者

使用特权

评论回复
11
xi_liang|  楼主 | 2014-7-7 15:29 | 只看该作者
xuan309170083 发表于 2014-5-16 21:40
支持

多谢支持:handshake

使用特权

评论回复
12
xi_liang|  楼主 | 2014-7-15 11:16 | 只看该作者
图片又恢复了:victory:

使用特权

评论回复
13
gxliu08| | 2014-8-5 11:51 | 只看该作者
学习学习,感谢分享

使用特权

评论回复
14
xi_liang|  楼主 | 2014-9-23 15:05 | 只看该作者
gxliu08 发表于 2014-8-5 11:51
学习学习,感谢分享

多谢帮顶,多谢支持

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://baiweijishu.taobao.com/ 百为STM32开发板 兼容官方STM3210E-EVAL开发板 WM-G-MR-09 WIFI开发板

41

主题

285

帖子

10

粉丝