stm32之uCGUI移植

发布者:灵感之翼最新更新时间:2015-10-29 来源: eefocus关键字:stm32  uCGUI移植 手机看文章 扫描二维码
随时随地手机看文章
声明:本教程是作者学习uCGUI过程中的笔记,最后整理出来,献给初学者,旨在带领初学者入门uCGUI,仅供学习之用,不得用于商业。如需转载,请注明出处。

 

 

说明

 

平台:        stm32f103zet6

 

TFTLCD型号: 2.8寸9341控制器

 

ucgui源码:   3.90a版本

 

触屏:        不带触屏(后续更新)

 

操作系统:    不支持 

 

移植教程

一、      准备工作:

(一)      源码:准备3.90版本的UCGUI源码

注:如果需要跑GUIDEMO,那么还需准备GUIDEMO源码。

(二)      LCD底层驱动:准备LCD屏的底层驱动,接口函数如下:

1、       设置坐标点;

static  void lcd_set_cursor(u16 xpos, u16 ypos);

2、       在指定点画指定颜色的点;

void lcd_set_point(u16 xpos, u16 ypos, u16 color);

3、       读取某个点的颜色值;

       u16  lcd_get_point(u16 x, u16 y);

4、        在指定区域填充颜色(开窗口的方式,速度更快);

       void lcd_window_fill(u16 sx, u16 sy, u16 ex, u16 ey, u16 color);

5、        LCD屏初始化(主要是出厂初始化代码);

       void ili9341_initialize(void);

注:这里列出了和UCGUI的接口函数,这些函数的具体实现需要根据自己的LCD屏具体实现这些函数。

 

 

二、       移植过程

(一)      把UCGUI源码copy到自己的工程中,UCGUI文件夹下面,方便管理;

(二)      添加UCGUI源码到工程中,放在对应的组下面,方便管理,如图:

 

(三)      添加头文件路径,如图:

 

(四)      打开GUI_Config文件夹,编辑GUIConf.h文件,内容如下:
#define GUI_OS                     (0)   
#define GUI_SUPPORT_TOUCH         (0)
#define GUI_SUPPORT_UNICODE       (1)
#define GUI_DEFAULT_FONT           &GUI_Font6x8
#define GUI_ALLOC_SIZE              40*1024
#define GUI_WINSUPPORT             0
#define GUI_SUPPORT_MEMDEV        1
#define GUI_SUPPORT_AA             1

 

 

(五)      打开GUI_Config文件夹,编辑LCDConf.h文件,内容如下:
#define LCD_XSIZE               (320)  
#define LCD_YSIZE               (240)  
#define LCD_BITSPERPIXEL        (16)
#define LCD_CONTROLLER         (-1)
#define LCD_FIXEDPALETTE        (565)
#define LCD_SWAP_RB            (1)
#define LCD_INIT_CONTROLLER()    ili9341_initialize();

 

 

 

 

(六)      打开GUI_LCDDriver文件夹,编辑LCDDummy.c文件,内容如下:

1、       先添加LCD驱动文件的头文件,以便下面函数调用;如:#include "tftlcd.h"

2、       确保  #if (LCD_CONTROLLER == -1)
     && (!defined(WIN32) | defined(LCD_SIMCONTROLLER))
中的 LCD_CONTROLLER == -1 ,和LCDConf.h中的宏定义对应

3、       在 void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) 函数最后一行添加如下语句:
lcd_set_point(xPhys, yPhys, PixelIndex);

4、       在 unsigned int LCD_L0_GetPixelIndex(int x, int y) 函数 return语句之前添加如下语句:
PixelIndex = lcd_get_point(x, y);

5、       现在回到main函数

1)      添加头文
#include "GUI.h"
#include "GUIDEMO.h"

2)      在main函数中先调用必要的初始化函数后,再调用GUI_Init(); 函数,这个函数会调用LCD屏的初始化函数

3)      为了测试UCGUI是否初始化成功,我们先调用几个函数试试,在GUI_Init();下面接着调用如下函数:
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_RED);
GUI_Clear();
GUI_SetFont(&GUI_Font24_1);
GUI_DispStringAt("- - uCGUI disp Function sample - -",4,10);
// 延时3s,方便观看结果
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
看看是否把LCD刷成黑色,是否显示红色字符串

4)      然后再while循环中调用 GUIDEMO_main(); 函数,开始运行GUIDEMO

 [page]

(七)      定时器中断配置,给UCGUI系统一个时钟(个人观点,仅供参考),否则GUIDEMO程序无法运行

1、  在这里用定时器2,所以需要配置定时器和NVIC中断,配置函数大家就自己做了,只是这里的定时器配置成2KHz的频率,如果想要界面变化快点,那么提高频率即可;然后我们进入定时器2的中断函数,首先在stm32f10x_it.c文件中加入外部变量声明 extern volatile int OS_TimeMS; 然后加入定时器2中断函数,如下:
void TIM2_IRQHandler(void)

{

       if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )

    

        TIM_ClearITPendingBit(TIM2 ,  TIM_FLAG_Update);

        OS_TimeMS++;

        if(OS_TimeMS ==0)

        {

         //GUI_TOUCH_Exec();   // 不带触摸不需要这条语句

             

    }

}

 

 


 

后记

如有bug,恳请指出,欢迎各位网友一起讨论,一起进步,祝大家学业有成。

后续更新,请关注作者博客。

 

注意的问题:

1、      uCGUI中已经有LCD这个宏定义了,所以用户的代码中绝对不能有LCD这个宏定义,很多人在写LCD驱动函数的时候,用到了LCD这个宏定义,建议用别的名字如TFTLCD;

2、      用到的库函数一定要进入到工程中,并且要添加对应的头文件路径。

 

 

 

 

 

 

虽不精彩,但却用心!水平有限,一笑了之!

 

 

 

 

                                                                            作者:Stone_up

                                                                            时间:2013-08-01

                                                                            版本:V1.0

 

 


[转载]stm32之uCGUI移植

[转载]stm32之uCGUI移植

[转载]stm32之uCGUI移植
 

关键字:stm32  uCGUI移植 引用地址:stm32之uCGUI移植

上一篇:STM32之如何编译出 .lib 文件
下一篇:ARM的I/O口操作

推荐阅读最新更新时间:2024-03-16 14:37

STM32常见问题解决
STM32 仿真延时程序蹊跷事件 我的 stm32 开发板定了 1ms 定时,到 500ms 让一个灯翻转一次。 用 J-lin k 进行仿真的时候能正常看到灯 是 1 s 亮一次 , 但脱离仿真器重新上电后这灯就变成 了 4 S 亮一次了 。比较奇怪 解决了,晶振的故障,好像跟晶振旁的电容有关。导致了振幅不对。 估计是我们买的电容有问题。 请教 STM32 工作时发热的问题 第一次使用 STM32 的芯片 , 根据手册了解到它的 IO 脚是支持 5V 的电平的 , 于是我利用了几个 IO 引脚直接与 5V 电平的电路联通 , 在硬件调试过程中修改某些连接电阻时出现了芯片击穿 , 几个相关联的引脚与 3.3 V击穿,导通。后来
[单片机]
stm32地址空间
如图是一张stm32的内存映射图,其中代码区是从0x0800 0000开始的,他的结束地址是0x0800 0000加上实际芯片的flash大小,他的ram的起始地址是0x2000 0000,然后结束地址依然是加上芯片实际的ram大小。 附一张手册地址映射说明:
[单片机]
<font color='red'>stm32</font>地址空间
STM32驱动W5100实现udp通信
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F103ZE 源代码: 驱动层代码: drv_w5100.h span style= font-size:18px; /********************************************************************* * w5100驱动层头文件 * (c)copyright 2013,jdh * All Right Reserved *文件名:drv_w5100.h *程序员:jdh *修改日
[单片机]
STM32——时钟
高速–外部时钟外接晶振 高速–内部时钟 低速–外部时钟LSE:外接晶振 低速–内部时钟LSI:RC震荡 锁相环倍频输出 PLLclk和PLL48ck的来源 主 PLL 时钟第一个高速时钟输出 PLLP 的计算方法 我们的外部晶振选择 8MHz。同时我们设置相应的分频器 M=8,倍频器倍频系数 N=336, 分频器分频系数 P=2,那么主 PLL 生成的第一个输出高速时钟 PLLP 为: 如果我们选择HSE为PLL时钟源,同时SYSCLK时钟源为PLL,那么SYSCLK时钟为 168MHz。 这对于我们后面的实验都是采用这样的配置。
[单片机]
<font color='red'>STM32</font>——时钟
STM32 对外设基地址,总线外设基地址和寄存器基地址的理解
前言 本博文基于STM32F103ZET6和MDK以及V3.5.0库函数; 本博文从Cortex-M3内核的寻址空间映射一直聊到库函数是怎样配置具体的某一个寄存器; 如有不足之处,多多指教; Cortex-M3存储器映射 由于STM32系列芯片为32位处理器,所谓32位处理器,也即是地址总线有32根,可寻址空间为2^32=4GB;如下图 从图片上可以看出,ARM公司已经为芯片生产厂商们划分好了存储映射空间;并且,0x40000000~0x5FFFFFFF这段地址,映射片上外设的寄存器地址;STM32F10x.h这个头文件正是吧STM32的所有寄存器进行地址映射,此文件通过宏定义的方式,将各个寄存器的地址转换为相应的符号名称,如
[单片机]
<font color='red'>STM32</font> 对外设基地址,总线外设基地址和寄存器基地址的理解
基于STM32的数字PDA系统软件系统设计
数字PDA系统整体由硬件电路和软件系统2部分组成,硬件电路由低功耗ARM微控制器STM32ZET6控制的PDA外围电路组成,软件系统则由硬件驱动程序、μC/OS-Ⅱ实时操作系统、FATFS文件系统、GUI等部分组成。数字PDA系统将整个软件系统进行了整合,提供一种基于页的机制方法,即每页都是一个线程,利用μC/OS-Ⅱ的信号量、邮箱机制实现多线程之间的任务切换。PDA系统采用页机制的设计,旨在减少增加应用程序时代码的修改量和提高整个PDA软件系统的稳定性,以及提高应用程序的开发速度。 以Cortex-M3为内核的处理器由于其低功耗以及低成本并且是32位处理器,越来越多的研究人员已经从51处理器、AVR等处理器开始转移到这个领域
[单片机]
基于<font color='red'>STM32</font>的数字PDA系统软件系统设计
stm32学习1跑马灯程序之寄存器版本
1使能IO口时钟,配置相关寄存器RCC- AHB1ENR 2初始化IO口模式。配置四个寄存器GPIOX_MODER/GPIOX_OTYPER/OSPEEDER/PUPDR 3操作IO口,输出高低电平。配之寄存器GPIOX_ODR或BSRRL/BSRRH 1:RCC是一个结构体指针RCC- AHB1ENR使能寄存器AHB1,使能外部时钟第六位,位5,及设置这一位为1 ,c语言中利用或运算A|=B相当于A=A|B,32位及寄存器两种写法:1)RCC- AHB1ENR|=0x0020 2)RCC- AHB1ENR|=1 5;1左移5位比较直观 2:GPIOF- MODER= 32位寄存器,一组寄存器对应16个IO口,所以要配置9和10I
[单片机]
如何在STM32中收发float数据?
实际应用中,我们可能需要两个设备通过串口传输浮点数据: 本篇笔记为了方便演示,使用串口助手模拟其中一个设备,本篇笔记内容如下: 我们创建一个用于管理float类型数据的共用体: union float_data { float f_data; uint8_t by te [4]; }; 数据的流向如: 本次使用串口助手模拟发送设备,省略了第一步,主要看第②、③步。 创建两个共用体变量,用于发送与接收: union float_data rx_float_data, tx_float_data; 收发相关代码: // 公众号: 嵌入式 大杂烩 if(HAL_ UART _Receive(&huart3, rx_float
[单片机]
如何在<font color='red'>STM32</font>中收发float数据?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved