stm32 u8g2移植笔记

STM32 u8g2 移植笔记

前言

当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,ram为2k的arduino uno上都不会报空间不足,却在flash为512k,ram64k的stm32zet6上报错空间不足?这是由编译器导致的,arduino使用的是avr-gcc编译器在编译的时候会加-ffunction-sections -fdata-sections,链接的时候会加-Wl,-gc-sections选项,因而可以只链接用到的函数。stm32编译选项中有个类似的选项One ELF Section per Function,勾选该项可以极大的减少flash空间的占用,但仍不能解决空间不足的问题。

u8g2为什么需要这么大的flash空间?

  1. u8g2支持上百种屏幕,包含的太多的驱动函数。
  2. u8g2支持很多种字体,字体也占据了较多的空间

移植

这里的移植是针对于keil MDK开发STM32。

移植策略

一般而言对于移植库,不建议更改原码,但鉴于上面的问题,为达到更好的使用效果,我们需要修改原码:

  1. 修改u8g2_d_memory.c文件
  2. 工程中只添加需要用到的屏幕的驱动文件

移植过程

  1. 从官网下载原码
  2. 目前只移植c语言版本,因而只需要将用到csrc文件夹内的文件,将其复制到工程目录。
  3. 将原码添加到工程中,注意对于驱动文件(u8x8_d_xxx.c)我们只需要添加用到的哪一个型号就可以了,这里我用到的是u8x8_d_st7920.c。其余库文件全部添加到工程中,这里需要修改u8g2_setup.c文件,将未用到的函数全部注释掉。
  4. 修改u8g2_d_memory.c文件,将各个函数中的static uint8_t buf[xxx]注释掉,只在文件开始的地方定义一个全局的static uint8_t buf[1024];
  5. 将编译器的优化级别调整为-O2或-O3,否则还是会因为字体的原因出现链接时空间不足的问题,后面可以将字体文件存储到flash(w25q64)中。
你好!对于将 U8g2 移植STM32 上,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了适当的开发环境,包括 STM32CubeMX 和 STM32Cube HAL 库。如果没有,请先下载和安装它们。 2. 打开 STM32CubeMX,并创建一个新的工程。选择适合你的 STM32 芯片型号,并配置所需的引脚和外设。 3. 在 "Middleware" 部分中,找到 "Graphics" 并选择 "U8g2"。 4. 根据你的需求选择所需的显示屏控制器和接口类型。U8g2 库支持多种不同的控制器和接口。 5. 在 "Configuration" 选项中,配置 U8g2 库的其他参数,比如显示屏分辨率、字体等。 6. 生成代码并打开工程。 7. 在生成的代码中,找到 "main.c" 文件,并添加以下代码来初始化 U8g2 库: ```c #include "u8g2.h" u8g2_t u8g2; int main(void) { // 初始化代码 u8g2_Setup_<Controller>_<Interface>_u8g2(&u8g2, <rotation>, <u8x8_byte_fn>, <u8x8_gpio_and_delay_fn>); u8g2_InitDisplay(&u8g2); // 其他初始化代码 while (1) { // 显示内容更新代码 } } ``` 注意替换 `<Controller>` 和 `<Interface>` 为你选择的控制器和接口类型。`<rotation>` 是显示屏旋转角度,`<u8x8_byte_fn>` 和 `<u8x8_gpio_and_delay_fn>` 是用于与硬件通信的函数指针。 8. 在 `while (1)` 循环中,你可以使用 U8g2 库提供的函数来更新显示屏上的内容。 这只是一个简单的示例,你可能还需要根据具体需求进行其他配置和修改。请参考 U8g2 的文档和示例代码来了解更多细节。希望对你有帮助!如果你有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值