[活动专区] 【AT-START-F437测评】+u8g2

[复制链接]
2680|12
 楼主| 夜声 发表于 2023-1-31 16:40 | 显示全部楼层 |阅读模式
U8G2移植
一、前言
本篇文章将U8G2在MDK环境移植到AT32F437ZMT7开发板,记录移植过程并通过OLED显示屏显示,OLED屏使用软件IIC的方式实现,当前开发板主频比较高,OLED显示屏使用软件IIC跑也特别快,足够使用。
二、U8G2简介
U8g2 是一个用于嵌入式设备的简易图形库,可以在多种 OLED 和 LCD 屏幕上,支持包括 SSD1306等多种类型的底层驱动,并可以很方便地移植到 Arduino 、树莓派、NodeMCU 和 ARM 上。
官网链接:https://github.com/olikraus/u8g2
U8g2 库同时包含了 U8x8 绘图库,两者的区别为:
U8g2 包含各种简单及复杂图形的绘制,并支持各种形式的字体,但需要占用一定单片机的内存作为绘图缓存
U8x8 只包含简单的显示文本功能,且只支持简单、定宽的字体。它直接绘制图形,没有缓存功能
39f9da675c810f782acbd4192ecf382a
同时官方也有文档使用移植说明:
13bc7d5272e8f514bd4f287269f01c4d
三、移植准备
官网下载AT32F437的BSP,使用官方给的库新家一个工程,官方的用着不太习惯,一文件由多个工程共用,当同时打开几个工程时报错,不习惯这种方式,所以自己新建了一个工程,只是工程文件放的文件夹不一样。
c021958032cd269baab17ad55eef2d40
OLED移植主要进行GPIO的初始化以及引脚定义修改。
b504115366e6b19dc1f471b8391bd041
引脚定义修改:
0bfcdf99379a5e3889f6ab52bf727ec1
主函数添加OLED初始化程序:
beb3601ff437bddcc412becfcc0cdc13
效果如下,OLED移植完成,开始进行U8G2图形库移植。
990c7b3d25fafefcd004b1d7739b5ea3
五、移植过程
下载U8G2源码后,解压后关注csrc,这个是源码文件夹。
12d6cec231bdae96d934523a96ba80d4
KEIL添加源码,的u8g2_d_xxx的文件选择自己对应型号即可。
f7952e94b6ca2840c314d06b94bb42f8
添加头文件路径:
709458ee00616022cb754c563d89100e
源码修改,主要是u8g2_d_memory.c 与 u8g2_d_setup.c 这两个文件,在u8g2_d_setup.c中选择自己屏幕对应的型号,其他的屏蔽掉。
bc7262e149b9274efd7ecb26c1ffe91a
u8g2_d_memory.c中取消注释uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt)函数,其他关闭。
fd32941c872094ae41b35f2e3cfb97a0
编译,出现8错误。
fee564fd661326b3a3f59944a69388d9
出现错误的原因主要是变量定义需要在函数的开头位置。
d9c662e6d0bab4aa7cc7186823db7ee4
接下来出现内存不够的情况。
b65aa8d7f7089086e55592c8117566b9
在屏蔽掉其他不使用的字库后编译通过,保留使用的字库。
f8c81743885780366472b42713d09503
使用软件IIC显示,在oled.c中添加u8g2Init和u8x8_gpio_and_delay函数,如下所示:
u8g2Init函数:
c3510cf80d95c6efd6d82d506f702cfa
u8x8_gpio_and_delay函数中添加GPIO的高低电平配置。
2c6c23becbe877c4efeab9d3142d0d72
使用官方提供的显示案例
453460cd8d4de1f92ac6f2f1ed509410
主函数:
1a76d1ff33d6b47e281970ab3232539f
六、总结
本篇文章已经完成u8g2的移植,其关键的地方在于IIC接口与u8g2的对接,本次使用的接口是软件IIC,当跑起来也很流畅,结果如下:
bd570704181e26b881315b11a8b9d9c2

wangwu1976@ 发表于 2023-4-13 14:03 | 显示全部楼层
点个赞!
ufbycd 发表于 2023-4-23 20:31 | 显示全部楼层
强哦,U8G2还能驱动这么多固态硬盘!
jtracy3 发表于 2023-5-7 14:56 | 显示全部楼层
U8g2显示中文乱码               
sdlls 发表于 2023-5-7 15:38 | 显示全部楼层
可以移植lvgl吗              
pentruman 发表于 2023-5-7 16:11 | 显示全部楼层
可以使用其他的gui实现的 。              
alvpeg 发表于 2023-5-7 16:31 | 显示全部楼层
这个代码怎么移植到其他的芯片上的
burgessmaggie 发表于 2023-5-7 16:56 | 显示全部楼层
u8g2 支持多种芯片类型,并针对不同型号的芯片提供了相应的驱动程序。
sheflynn 发表于 2023-5-7 18:33 | 显示全部楼层
怎么样调用初始化函数来初始化 u8g2 库和外设
cemaj 发表于 2023-5-7 19:12 | 显示全部楼层
u8g2 是一款用于驱动 OLED 和 LCD 显示屏的开源 C++ 库,支持多种芯片类型和显示屏尺寸,并具有丰富的图形绘制功能。
yorkbarney 发表于 2023-5-7 19:16 | 显示全部楼层
硬件iic驱动oled吗              
maudlu 发表于 2023-5-7 20:05 | 显示全部楼层
F437单片机能用u8g2吗?              
mnynt121 发表于 2023-5-7 20:11 | 显示全部楼层
网上有想的资料可以参考吗              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

89

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部