GuiLite移植到STM32F4开发板上

发布者:脑洞飞扬最新更新时间:2023-09-12 来源: zhihu关键字:移植 手机看文章 扫描二维码
随时随地手机看文章

大家好,最近在做Github找到一个有趣的开源Gui框架:GuiLite,按照说明移植了GuiLite到STM32F4OLED屏幕上,分析一下自己的移植经验。


01

GuiLite介绍


GuiLite是一个开源的Gui框架,只依赖于一个单一的头文件库(GuiLite.h),不需要很复杂的文件管理,代码量平易近人。

GuiLite由4千行C++代码编写,单片机上也能流畅运行,其最低的硬件运行要求如下:


CPU主频ROM大小RAM大小
24 MHZ29KB9KB

同时GuiLite具有很强的跨平台特性:

  • 支持的操作系统:iOS/macOS/WatchOS,Android,Linux(ARM/x86-64),Windows(包含VR),RTOS… 甚至无操作系统的单片机

  • 支持的开发语言:C/C++, Swift, Java, Javascript, C#, Golang…

  • 支持的第3方库:Qt, MFC, Winforms, CoCoa…

除此之外,GuiLite 提供一系列辅助开发工具:

  • ☁️完美的“云” + “物联网”解决方案:让你轻松驾驭全球IoT业务

  • 支持多语言,采用 UTF-8 编码; 支持视频播放

  • 资源制作工具为你定制自己的字体/图片资源

  • 所见即所得的GUI布局工具

  • 编译活跃度统计,及实时分析

  • 支持3D & Web

  • 支持Docker,一条命令启动。

02



GuiLite移植

2.1 硬件准备

STM32F407开发板

OLED屏幕

2.2 驱动准备

这里我使用STM32CubeMX 对开发板进行外设配置,开启STM32的硬件IIC,这里我用CubeMX开启后如下:

配置完成生成代码,同时将分配的堆空间增大:

代码生成后,我们复制正点原子的OLED驱动工程代码到Hardware硬件目录下(自己创建一个该目录)

在MDK里面添加文件,然后我们进行修改,注释掉头文件里面关于端口的定义,同时添加三个类型宏定义

然后我们进入oled.c文件,将void OLED_WR_Byte(u8 dat,u8 cmd)和 void OLED_Init(void)函数分别替换为下面的内容:

OLED_WR_Byte:

void OLED_WR_Byte(u8 dat,u8 cmd)
{ 
 if(cmd)
  HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&dat,1,0x100);
 else
  HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&dat,1,0x100); 
}

OLED_Init:

//初始化SSD1306         
void OLED_Init(void)
{        
 OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
 OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率
 OLED_WR_Byte(80,OLED_CMD);   //[3:0],分频因子;[7:4],震荡频率
 OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数
 OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64) 
 OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
 OLED_WR_Byte(0X00,OLED_CMD); //默认为0

 OLED_WR_Byte(0x40,OLED_CMD); //设置显示开始行 [5:0],行数.
                 
 OLED_WR_Byte(0x8D,OLED_CMD); //电荷泵设置
 OLED_WR_Byte(0x14,OLED_CMD); //bit2,开启/关闭
 OLED_WR_Byte(0x20,OLED_CMD); //设置内存地址模式
 OLED_WR_Byte(0x02,OLED_CMD); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
 OLED_WR_Byte(0xA1,OLED_CMD); //段重定义设置,bit0:0,0->0;1,0->127;
 OLED_WR_Byte(0xC0,OLED_CMD); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数
 OLED_WR_Byte(0xDA,OLED_CMD); //设置COM硬件引脚配置
 OLED_WR_Byte(0x12,OLED_CMD); //[5:4]配置
   
 OLED_WR_Byte(0x81,OLED_CMD); //对比度设置
 OLED_WR_Byte(0xEF,OLED_CMD); //1~255;默认0X7F (亮度设置,越大越亮)
 OLED_WR_Byte(0xD9,OLED_CMD); //设置预充电周期
 OLED_WR_Byte(0xf1,OLED_CMD); //[3:0],PHASE 1;[7:4],PHASE 2;
 OLED_WR_Byte(0xDB,OLED_CMD); //设置VCOMH 电压倍率
 OLED_WR_Byte(0x30,OLED_CMD); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;

 OLED_WR_Byte(0xA4,OLED_CMD); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
 OLED_WR_Byte(0xA6,OLED_CMD); //设置显示方式;bit0:1,反相显示;0,正常显示              
 OLED_WR_Byte(0xAF,OLED_CMD); //开启显示  
 OLED_Clear();
}

然后在main.c文件如下位置添加oled测试代码(记得添加头文件和头文件路径)

下载程序,观看现象

此 OLED 驱动的准备已经完成,下一步就是移植 GuiLite

2.3 例程移植

首先,我们上GuiLite的例程展示官网:GuiLiteDemo,选择Hello例程,将其中的 UI_Code文件夹复制到 Hardware 下:

在 MDK 工程里面导入UICode下的GuiLite.h和UIcode.cpp文件

我们在 main.c 文件开头添加 GuiLite 接口代码,接口代码如下:

//画点函数接口
void gfx_draw_pixel(int x, int y, unsigned int rgb)
{
    OLED_DrawPoint(x,y,rgb);
}
//画面函数(未使用)
void gfx_draw_fill(int x, int y,int w, int q, unsigned int rgb)
{ 
}
//创建一个函数指针结构体
struct EXTERNAL_GFX_OP
{
 void (*draw_pixel)(int x, int y, unsigned int rgb);
 void (*fill_rect)(int x0, int y0, int x1, int y1, unsigned int rgb);
} my_gfx_op;
extern void startHelloCircle(void* phy_fb, int width, int height, int color_bytes, struct EXTERNAL_GFX_OP* gfx_op);

//设定延时函数接口
void delay_ms(int milli_seconds)
{
 HAL_Delay(milli_seconds);
}

之后在main函数中添加如下代码

//传递函数指针
my_gfx_op.draw_pixel = gfx_draw_pixel;
my_gfx_op.fill_rect = NULL;//gfx_fill_rect;
//启动画圆
startHelloCircle(NULL, 128, 64, 1, &my_gfx_op);

然后我们修改UIcode.cpp文件中的代码,添加OLED头文件,以及在UI执行函数界面处添加OLED刷新函数

之后在UIcode的第8行修改3D圆的参数,因为OLED大小128x64 ,所以我的配置如下:

配置完成后,我们关闭Use MicroLIB选项,编译代码

编译成功,下载代码


03



Gui移植结果


下载完成后程序复位,可以在OLED上看到Demo的示例动画。


一些其他的演示效果

动图封面

动图封面

动图封面

<<< 左右滑动见更多 >>>

动图封面

动图封面

动图封面

<<< 左右滑动见更多 >>>

动图封面

动图封面

动图封面


关键字:移植 引用地址:GuiLite移植到STM32F4开发板上

上一篇:STM32中RTC简介以及使用方法
下一篇:STM32高级开发——使用VS Code搭建STM32开发环境

推荐阅读最新更新时间:2024-11-11 10:20

英国贝尔法斯特医疗首例:外科医生利用3D打印模型完成复杂肾脏移植手术
英国兰贝尔法斯特市医院的外科医生利用3D打印的肾脏复制品完全切除肾囊肿,促进了关键的移植手术,同时改善了器官捐赠者的生活。手术本身是爱尔兰第一个不需要翻修的手术。 来自贝尔法斯特的波琳芬顿(Pauline Fenton)患有晚期肾病,完全依靠透析治疗。医生发现波琳父亲是一个合适的肾脏捐赠者,但是血型不相容,而且有潜在的癌性囊肿。在此情况下,医生必须确保囊肿的精确完整切除以获得最大的健康移植组织。 考虑到移植准备的复杂性,外科医生与当地的医疗3D打印公司axial3D合作,以协助准备患者特定的手术指南。axial3D使用CT扫描成像来构建威廉芬顿肾的精确1:1模型。然后使用粘合剂喷射技术在axial3D实验室中对模型进行3D
[医疗电子]
Linux向目标系统AT91RM9200的移植方法与应用优势分析
1.引言 目前,在嵌入式系统里基于ARM微核的嵌入式处理器以其功耗低,功能强大的优点已经成为市场的主流。与此同时,在网络上发展起来的Linux操作系统,以其功能强大,开放源代码,支持硬件种类众多的特点,越来越受到人们的青睐。然而如何把Linux操作系统移植到ARM平台上却成了一个重点,也是一个难点问题。 嵌入式Linux系统包括引导程序(Bootloader),内核(kernel)和根文件系统三个部分,其开发流程如图1所示:嵌入式Linux 移植到特定的硬件平台上,一般需要以下五个步骤: (1)前期准备包括从网站上下载嵌入式Linux的源码包, 搭建交叉编译开发环境,配置主机的开发环境等 (2)配置Bootloader,并将
[单片机]
Linux向目标系统AT91RM9200的<font color='red'>移植</font>方法与应用优势分析
at91sam9x5ek linux 4,嵌入式Linux移植相关经验积累
一:相关源码 (1)arm-2010q1-202-arm-none-linux-gnueabi.tar.bz2 交叉编译工具 gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) (2)Bootstrap-V3.5.tar.bz2 ATmel提供的一级Boot (3)u-boot-2014.04.tar.bz2 Uboot (4)linux-2.6.39_OK.tar.bz2 Linux Kernel (5)busybox-1.13.0.tar.bz2 制作根文件系统的工具包一 (6)e2f
[单片机]
stm32上移植linux的实操案例经验分享
刚从硬件跳槽为嵌软时,没有任何一丝的准备。一入职,领导就交代了一项特难的任务——在stm32上移植linux! 瞬间我就懵了,没办法硬着头皮上吧,先搜集资料,我之前跑的是ok6410的板子上运行的linux,现在是在stm32上移植,以前stm32倒是玩过,研究生期间就捣鼓过它,但现在还没从抓烙铁的硬件当中缓过神来,就转到嵌入式软件的开发,更头疼的是stm32没有MMU!没有MMU!找了一下,好吧,有个uClinux! 于是开始学习各种相关的知识,了解到linux的启动一般是u-boot——》liunx内核——》根文件系统,那么首先要做个基于stm32的u-boot,先初始化时钟、外设、中断什么的,看了韦东山老师的视频感觉
[单片机]
stm32上<font color='red'>移植</font>linux的实操案例经验分享
STM32之HAL库详解及手动移植
HAL库结构   说到STM32的HAL库,就不得不提STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间。STM32CubeMX就是以HAL库为基础的,且目前仅支持HAL库及LL库!首先看一下,官方给出的HAL库的包含结构: - **stm32f2xx.h**主要包含STM32同系列芯片的不同具体型号的定义,是否使用HAL库等的定义,接着,其会根据定义的芯片信号包含具体的芯片型号的头文件: #if defined(STM32F205xx) #include stm32f205xx.h #elif defined(STM32F215xx) #include stm32f21
[单片机]
STM32之HAL库详解及手动<font color='red'>移植</font>
日本完成首例再编程干细胞异体移植
近日,一位60岁的日本男性成为全球第一个接受由他人诱导多能干(iPS)细胞生成的细胞的人。下面就随医疗电子小编一起来了解一下相关个内容吧。 日本完成首例再编程干细胞异体移植术 该国一个研究小组为眼疾患者成功移植了由他人的iPS细胞培养而成的视网膜细胞。研究小组称,这是世界首例iPS细胞“异体移植”手术,与利用患者本人的iPS细胞相比,费用和时间都大幅减少。 日本理化学研究所宣布,他们与神户市立医疗中心中央市民医院等机构合作,3月28日将异体iPS细胞培养成的视网膜细胞移植到一名60多岁男性右眼中。患者患有渗出型老年黄斑变性,这一老年性疾病由视网膜中的黄斑区退化引起,早期症状为视力下降,晚期则表现为视野中心出现暗点、视物模糊
[医疗电子]
移植openssh
一、环境介绍 1.1 宿主机 Ubuntu 1404 32 位 1.2 嵌入式平台 ATMEL AT91SAM9X25 1.3 交叉工具链 arm-none-linux-gnueabi openssh-7.5-p1移植所需源码包下载地址 二、交叉编译 2.1 先编译 openssh-7.5-p1 依赖的模块 2.1.1 zlib tar xvf zlib-1.2.11.tar.xz cd zlib-1.2.11/ export CC=arm-none-linux-gnueabi-gcc ./configure --prefix=$PWD/tmp make CC=arm-none-linux-gnueabi-gcc
[单片机]
STM32下uIP移植问题
就我个人认为在uIP的移植中除了驱动之处有以下几点需要注意: 1.uip_timer 时钟要加入到中断中去。 2.各种appcall实现。如在tcp_client_demo.c 有如下语句 if(uip_len 199) { ((u8*)uip_appdata) =0; } strcpy((char*)tcp_client_databuf,uip_appdata); 这样在处理数据长时都是以tcp_client_databuf 数组的长来处理,这样不灵活,client从网络中接收到的数据长本来就是用一个全局变量uip_len来存储的。
[单片机]

推荐帖子

240x SCI中断模式下的TXD有问题.......?????
程序在RealTimeMode下运行,可观察到:1)IMR.4=1;(INT5mask=1);2)SCICNTL1=0x22;(TX_ENA=1);3)SCICNTL2=0xC1;(TX_INT_ENA=1);4)SCIPRI=0x70;(TX_PRIORITY=1,lowpriority=INT5);但程序还是进不了INT5(TXD)中断.各位,会是什么原因引起???????????欢迎至电商讨:0755-25
niantianxia 微控制器 MCU
有没有人用过HS1101湿度传感器?
本人想调一下湿度传感器?有没有人调试过指点一下有没有人用过HS1101湿度传感器?大哥,有时间您也指点我下啊!谢谢啊!
zhtong19860109 Microchip MCU
求3.5mm音频插座的PCB封装?
最近要设计一块9B96的控制板,想把音频部分加上去,需要一个类似DK-9B96原理图中,STx-3000耳机插座的PCB封装,不知道具体的尺寸,希望能有这方面设计经验的大侠不吝赐教,非常感谢!!!求3.5mm音频插座的PCB封装?LZ,pcb封装搞到手没?有的话麻烦转发一份啊,非常感谢!同求啊!楼主,我也需要。。麻烦转一个啊!!回复楼主fengye5340的帖子拿到硬件测量呗还没有硬件的,放大图片测量楼主,我只有这种3.5mm的耳机插座,希望对你有用。懒画了,谢谢了!!
fengye5340 微控制器 MCU
代码整洁之道(2)
《极限编程实施》作者RonJeffries仔细研究了贝克的简单代码规则,并依其重要顺序分别列为:&能通过所有测试&没有重复代码&体现系统中的全部涉及理念&包括尽量少的实体,比如类、方法、函数等能通过所有测试这一点,后文中在架构设计方面详细说明,这里我们还是借助一个小的例子说明“没有重复代码”的一些技巧。曾经有一次我将多份不同的程序代码用A4纸打印出来,平摊到我的床上对照时,还在上小学的女儿在旁边说道:爸比,你每天就是看这几只毛毛虫爬来爬去吗?always、if、else
guyu_1 FPGA/CPLD
今天上午十点在线直播【瑞萨电子安全物联网套件为您提供安全云联接解决方案
直播时间:今天(11月20日)上午10:00-11:30直播主题:物联网从端到连接管道到云端的数据传输过程中,随时都有数据安全和信息泄露的风险。为了帮助客户完成安全的物联网连接工程。瑞萨电子使用MQTT+TLS,从安全的三个方面全面保护客户数据的保密性、完整性、可用性,并且可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。瑞萨电子安全物联网套件基于SK-S7G2提供完整的参考代码和相应的硬件设计资料,包括:使用Synergy平台的MQTT和TLS连接至
EEWORLD社区 综合技术交流
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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