GuiLite移植到STM32F4开发板上
大家好,最近在做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 硬件准备
2.2 驱动准备
这里我使用STM32CubeMX 对开发板进行外设配置,开启STM32的硬件IIC,这里我用CubeMX开启后如下:
配置完成生成代码,同时将分配的堆空间增大:
代码生成后,我们复制正点原子的OLED驱动工程代码到Hardware硬件目录下(自己创建一个该目录)
在MDK里面添加文件,然后我们进行修改,注释掉头文件里面关于端口的定义,同时添加三个类型宏定义
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
点击这里找小助理0元领取: 嵌入式物联网学习资料(头条)
然后我们进入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 驱动的准备已经完成,下一步就是移植 GuiLite2.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的示例动画。
一些其他的演示效果
<<< 左右滑动见更多 >>>
<<< 左右滑动见更多 >>>
原文链接:https://mp.weixin.qq.com/s/vAc_rSIe9cPNcWLYj-xCyg、
转载自:嵌入式大杂烩
原文链接:GuiLite移植到STM32F4开发板上
本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
沙滩和海浪天海一线相汇于东方,霞光让它们换上了艳丽的晚妆。泡澡的礁石横七竖八,半坐半躺,懒洋洋。踏进浅水的双脚,感觉到一阵阵清凉。大海总让人们充满了好奇和幻想。你记不记得安徒生的小人鱼?那个
方与圆(六十四)抄书打卡第285天,2022。12。11别把冷遇当回事人的事业不论大小,总有一些光环笼罩。当光环褪去,只有归于平淡,过着平凡平静的生活,孤寂和落寞在所难免。人生有起伏,事业会有曲折
耳边评测两万三买块砖?海贝音乐HiByRS8旗舰播放器听感评测01THEONE我根据多年的经验,总结出一个很奇怪的现象大多数发烧友的习惯是不断往复地尝试各类不同的耳机,而终其HiFi生涯地寻找理想中的一个播放器。所以,从磁带机光盘机,到硬盘机
小米1313Pro发布3999元与4999元起12月11日晚,小米正式发布了小米13小米13ProMIUI14,以及小米迷你主机。小米13的价格和小米12S接近,小米13Pro比小米12SPro贵300400元。小米13小米1
桌面凌乱如何解现如今各种桌面整理案例,正在刺痛热爱整洁或有强迫症人群的神经,譬如本人。当我们桌面整理的干干净净,是否会因为不合理的桌面插板或者插座设计的不合理,而为整洁的桌面带来一丝不爽。你是否
生命无常感恩活着大家好!我60后悟道。思人生,悟情感,知微见约,大道至简进入人生下半场,不时有亲朋好友离我而去。有的是寿终正寝的,有的是英年早逝,还有的是生无可恋,还有在疫情和意外中丧失生命的人。
别再吐槽刘亦菲的衣品很差,感觉是衣服配不上她,就是披麻袋都美女星刘亦菲有时穿衣品味确实不如其他很多的女星,当然在多数情况下她穿的服装都是非常漂亮,只有在极少的情况下她穿衣品味确实不够好,甚至曾经被众多网友吐槽她穿衣品味太差了。幸好她是女神级
宇宙中最神奇的长度21厘米光子以您能想象到的每个波长出现。但是一个特殊的量子跃迁可以使光精确到21厘米,这是很神奇的。这张星系Messier81的地图是根据超大阵列获取的数据构建的,以21厘米的辐射绘制出这
80万人评论,1793万点赞!C罗发文破纪录,最后一战比梅西更轰动北京时间12月12日,葡萄牙已经告别了世界杯,C罗发布长文,总结自己的第5次世界杯之旅。而这次的C罗长文,再次尽显了他的惊人影响力,他的Instagram已经成为了实时点赞人数最多
摩洛哥vs葡萄牙前瞻C罗对黑马或继续替补,G拉莫斯再次闪光?世界杯淘汰赛14决赛摩洛哥VS葡萄牙比赛时间北京时间2022年12月10日2300看点在点球大战击败西班牙后,摩洛哥本届世界杯依然保持不败,已然成为了赛事最大黑马。葡萄牙在上场比赛
MVP回归?胡明轩高效一战关键三分杀死比赛正负值15队内最高12月10日,CBA常规赛继续进行,广东队VS广州队。比赛开始后两队都全力争胜,广东队攻防稍弱,他们首节落后2分,半场落后9分。下半场双方仍力拼,因此一直鏖战到加时赛,广东队后来更