完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
1、硬件设备
使用的是正点原子的F4探索者开发板,编写的工程实例也是基于正点原子的工程实例。 2、移植过程* 2.1下载源码以及添加文件夹 首先下载UCGUI源码,网上有很多,搜一下就能找到,我用的是3.98版本,这是我自己整理完成的ucGUI文件夹的百度云地址,到时候下载好,直接添加到工程文件里即可。 整理完成的ucGUI百度云下载地址 我们建立的工程是基于正点原子F4开发板的【TFTLCD显示实验】,打开相应的工程文件夹,在其中创建ucGUI的文件夹。由于ucGUI/CORE文件中已经存在了lcd.h和lcd.c的文件,所以我们将工程目录HARDWARE/LCD中的lcd.c文件和lcd.h文件的文件名换成ili93xx.c和ili93xx.h。然后打开ili93xx.c和ili93xx.h文件,将其中的void LCD_Init(void)函数更名为void LCD_hard_Init(void)以防与ucGUI中的原有函数名冲突。 我是首先将以上步骤完成之后编译一下没错误,TFTLCD测试程序正常能使用,说明没有改错,然后再进行下一步。 2.2在工程目录下添加相应文件并添加头文件路径 如图所示,在工程文件夹下建立和下载完的文件夹中相对应的文件夹,并添加相应文件——但是GUI_X文件夹下只添加GUI_X.c,不添加别的c文件。 尤其是添加头文件路径那一步很关键,不然会出错,而且因为编译器编译起来至少10分钟,重新编译会很浪费时间。 2.3修改Config文件夹里的3个头文件 **打开Config/GUIConf.h将其修改如下:** ---------------------------------------------------------------------- File : GUIConf.h Purpose : Configures abilities, fonts etc. ---------------------------------------------------------------------- */ #ifndef GUICONF_H #define GUICONF_H #define GUI_OS (0) #define GUI_SUPPORT_TOUCH (0) //1改成0,不支持触摸屏 #define GUI_SUPPORT_UNICODE (0) #define GUI_DEFAULT_FONT &GUI_Font6x8 #define GUI_ALLOC_SIZE 20000 /****************************************************** * * Configuration of available packages */ #define GUI_WINSUPPORT 0 //本来是1,由支持改成不支持,其实改不改无所谓,网上的源代码是改成不支持 #define GUI_SUPPORT_MEMDEV 0 #define GUI_SUPPORT_AA 0 #endif /* Avoid multiple inclusion */ 里面的宏定义的意思 #define GUI_OS (0) //操作系统的支持 #define GUI_SUPPORT_TOUCH (1) //触摸屏 #define GUI_SUPPORT_MOUSE(1) //鼠标 #define GUI_SUPPORT_UNICODE (1) //UNICODE支持,显示汉字 #define GUI_DEFAULT_FONT &GUI_Font6x8 //GUI默认字体 #define GUI_ALLOC_SIZE 5000 //动态内存 #define GUI_WINSUPPORT 1 //窗口控件支持 #define GUI_SUPPORT_MEMDEV 1 //内存设备支持 #define GUI_SUPPORT_AA 0 //抗锯齿形。打开刷新速率会差 **打开Config/LCDConf.h将其修改为如下:** /*************************************************** ---------------------------------------------------------------------- File : LCDConf_1375_C8_C320x240.h Purpose : Sample configuration file ---------------------------------------------------------------------- */ #ifndef LCDCONF_H #define LCDCONF_H /********************************************************************* * * General configuration of LCD * ********************************************************************** */ #define LCD_XSIZE (480) #define LCD_YSIZE (800) //注意,我们使用的4.3英寸屏是480*800。 //如果是3.5英寸屏那么就是320*480。 #define LCD_BITSPERPIXEL (16) #define LCD_CONTROLLER (-1) #define LCD_FIXEDPALETTE (565) #define LCD_SWAP_RB (1) //红蓝反色交换 #define LCD_SWAP_XY (0) //X、Y轴坐标互换——0是不需要 //正常竖屏显示就是0 #define LCD_INIT_CONTROLLER() LCD_hard_Init(); #endif /* LCDCONF_H */ //就多了这句,然后源代码其余部分删掉。 **在ili93xx.c文件中添加函数并在.h文件中声明** void ili9320_SetPoint(u16 x,u16 y,u16 color) { POINT_COLOR=color; LCD_DrawPoint(x,y); } **修改LCDDriver文件中间的LCDDummy.c** 打开LCDDriver文件夹里面的LCDDummy.c文件,添加头文件包含#include "ili93xx.h";将预处理命令修改为#if (LCD_CONTROLLER == -1) 。 在void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)函数最后添加语句ili9320_SetPo 在unsigned int LCD_L0_GetPixelIndex(int x, int y)函return语句之前添加PixelIndex = LCD_ReadPoint(x,y); 为什么添加这两个函数 因为uCGUI的显示是基于点的显示,即uCGUI会调用你自己驱动的画点操作完成图案的显示。 画点函数,void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)的最后添加语句ili9320_SetPoint( xPhys, yPhys ,PixelIndex);而函数 void ili9320_SetPoint(u16 x,u16 y,u16 color) { POINT_COLOR=color; LCD_DrawPoint(x,y); } 其中的 LCD_DrawPoint(x,y);就是正点原子例程里面的画点函数。 读点函数,返回设定坐标点的颜色值。即ILI93xx.c文件里的LCD_ReadPoint()——正点原子例程里面的读点函数;所以写成: 在unsigned int LCD_L0_GetPixelIndex(int x, int y)函return语句之前添加PixelIndex = LCD_ReadPoint(x,y); 3、修改主程序 添加#include “gui.h”的预处理命令。 #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "ili93xx.h" #include "key.h" #include "touch.h" #include "gui.h" int main(void) { Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz delay_init(168); //延时初始化 uart_init(84,115200); //初始化串口波特率为115200 LED_Init(); //LED端口初始化 LCD_hard_Init(); POINT_COLOR=RED; GUI_Init(); //GUI初始化 GUI_SetBkColor(GUI_RED); //设置GUI背景颜色 GUI_Clear(); GUI_SetFont(&GUI_Font24_ASCII); //设置GUI字体 GUI_DispString("Hello World"); //显示字符 while(1) { delay_ms(400); LED0 = !LED0; } } 4、第一次运行出现的错误以及解决 gui.h文件中有一个 它老是提示我, LCD_COLORINDEX_UNION LCD;后面需要加一个“)”,应该是这样的LCD这个名称跟某些其他的的定义弄混了(百度到一个结论,但是没有提供解决办法),最后的解决办法是: 点开原来的出错的地方,右键查看定义,发现有一个头文件 LCD_Private.h中,存在这些宏定义: 我们把 LCD_Private.h头文件中相应的LCD改成LCD_gui就可以了,然后把gui.h文件中的LCD_COLORINDEX_UNION LCD;也改成LCD_COLORINDEX_UNION LCD_gui;重新编译之后运行: 还有一个错误: 无法打开#include “Ili9340.h”,这时候我们直接把LCDDriver.c移除,然后编译之后成功,下载到单片机之后,运行成功。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1804 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1097 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
736 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1686 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
747浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
580浏览 3评论
603浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 14:38 , Processed in 0.829509 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号