OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4561|回复: 3

ucgui移植stm32f4的步骤和出现的问题及解决方法

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-2
在线时间
5 小时
发表于 2017-9-6 10:46:52 | 显示全部楼层 |阅读模式
一、移植步骤
目的:将ucgui源码移植到STM32开发板
ucgui源码:3.98版本
开发板:STM32F407ZGT
注意:
1.源码的版本和开发板的型号可以不一样,移植方法都是一样的,这只是我用的版本做的实验。但是一定要保证ucgui源码一定要正确,否则不可能成功,我就吃了这个亏。
2.我是直接使用正点原子的开发版和其LCD的源码,但是使用其源码需要做一定的修改,我会先讲移植,后面再讲怎么改的。
步骤:
1.准备好硬件开发平台(我使用的是STM32f407系列的CPU)、ucGUI源码(我使用的是3.98
版本的)、完整的KEIL工程,主要包含:lcd_driver.clcd_driver.h文件(笔者的TFT驱动)。
关于上面这个.c  .h,里面主要包含下面三个移植用到的函数:
void TFT_Init(void);        //初始化
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color);                //快速画点
u16  LCD_ReadPoint(u16 x,u16 y);                                 //读点
2.GUI源码里复制代码,进行工程搭建
1)复制 源码/Start 文件下的GUIConfig这两个文件夹到自己的工程模板,如下图;
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDF77.tmp.jpg
(2)复制源码/Sample/GUI_X文件夹下的GUI_X.c 文件,粘贴到工程模板下的Config里;
(3)打开事先准备好的KEIL工程,添加分组。如下图
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDF97.tmp.jpg
(4)添加文件,Config这个组添加所有的.c.h文件,其余的文件只添加.c文件
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDF98.tmp.jpg
(5)最后要在c/c++里添加路径。
(6)修改:Config / GUIConf.h文件:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDF99.tmp.jpg
其余部分不用动。
(7)修改Config / LCDConf.h
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDF9A.tmp.jpg
注:第12行是设置屏的大小,我是4.3寸屏(分辨率是480*800),所以我设置为480800
这是我修改之后的源码,大家看看是不是声明下面少了许多函数啊,没错,我删掉了,原因很简单,我的底层驱动IC程序是厂家提供的,而且GUI源码也没有我的这部分驱动程序。所以大家弄得时候也要一并删除,只留下红色代码部分。
(8)修改:LCDDriver / LCDTemplate.c文件(有的源码是LCDDummy.c)。
添加头文件#include "lcd_driver.h"
找到void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) 删除该函数里面所有程序,
添加:LCD_Fast_DrawPoint(x, y, PixelIndex);//快速画点
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDFAB.tmp.jpg
找到unsigned int LCD_L0_GetPixelIndex(int x, int y) 删除该函数里面所有程序,
添加:return LCD_ReadPoint(x, y);//读点
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDFAC.tmp.jpg
(9)修改主函数,添加#include”GUI.h”//头文件包含;
int main(void)
{
        delay_init(168);                              //初始化延时函数
        uart_init(115200);                                //初始化串口波特率为115200
        LED_Init();                                        //初始化LED
        TFT_Init();                                   //初始化LCD FSMC接口
        GUI_Init();                                        //GUI初始化
        GUI_SetBkColor(GUI_BLUE);                //设置背景为蓝色
        GUI_SetColor(GUI_RED);                //设置字体颜色为红色
        GUI_Clear();
        GUI_DispString("Hello Word");        //显示字符Hello Word
}
至此,移植结束,烧到开发板中会显示蓝色背景,红色字体的”Hello Word”。
二、我出现的问题
我也是第一次玩ucgui移植,在移植过程中,我出现过很多问题,现在来说一说。
1.移植之前的模板部分要搞好。正点原子的程序模板有一个文件名为CORE,源码里面也有一个叫core,所以先要改一下名字避免重名,我就把程序模板中的CORE改为CORER
2.原本初始化函数名LCD_Init(),现在改为TFT_Init()
3.由于在GUI源码里有文件叫LCD.cLCD.h,而原本lcd的驱动程序lcd.c,lcd.h,为了避免搞错,现在将驱动程序名改为lcd_driver.clcd_driver.h
4.最后一个问题,
使用 UCGUI自带的 LCD_L0_SetPixelIndex(x, y0, LCD_COLORINDEX); 语句,提示错误error: #134: expected a field name
原因:
工程提供的驱动Lcd_driver.h中的第110行:#define  LCD     ((LCD_TypeDef *) LCD_BASE)
LCD->LCD_RAM = LCD_COLORINDEX;
UCGUI的源码中#define   LCD_COLORINDEX   GUI_Context.LCD.aColorIndex16[1]
结论:从上面的展开的语句中发现 前后都使用了 LCD,由于头文件中定义一个 LCD 的字符定义,而UCGUI中也定义 LCD 为一个 union 导致命名定义冲突
解决方法:  #define  LCD       ((LCD_TypeDef *) LCD_BASE)
改为#define  LCDSS     ((LCD_TypeDef *) LCD_BASE),然后凡是用到了这个结构体的地方都改一下名字,(93,100,107,115,130,136,385,426,2717,2749,2766这些行都要改)。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsDFAD.tmp.jpg

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-11-3 11:36:52 | 显示全部楼层
回复 支持 反对

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-11-3 11:37:05 | 显示全部楼层
但是看不到图
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-1-16
在线时间
37 小时
发表于 2018-5-3 16:33:05 | 显示全部楼层
看不到图啊,老铁
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表