u8g2的STM32移植,附上一些图片取模和字体取模的方式。

news/2025/3/15 19:07:01/

u8g2的STM32移植,附上一些图片取模和字体取模的方式。

  • STM32移植
  • 取模方式
    • 制作自己的字体库

STM32移植

  1. 准备一个正常运行的STM32模板
  2. 下载 U8g2 的源码和 U8g2 的 STM32 实例模板
    源码:https://github.com/olikraus/u8g2
    STM32 实例模板:https://github.com/nikola-v/u8g2_template_stm32f103c8t6
  3. 去掉无用的驱动文件,只保留 u8x8_d_s**d1306_128x64_noname.c
  4. 精简 u8g2_d_setup.c,只保留 u8g2_Setup_ssd1306_i2c_128x64_noname_f ()
/* ssd1306 f */
void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb)
{uint8_t tile_buf_height;uint8_t *buf;u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb);buf = u8g2_m_16_8_f(&tile_buf_height);u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation);
}
  1. 精简 u8g2_d_memory.c, 只保留 u8g2_m_16_8_f ()
uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt)
{#ifdef U8G2_USE_DYNAMIC_ALLOC*page_cnt = 8;return 0;#elsestatic uint8_t buf[1024];*page_cnt = 8;return buf;#endif
}
  1. 对工程进行设置并剔除编译错误
  2. 写一下软件I2C的驱动
uint8_t u8g2_gpio_and_delay_stm32(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr)
{switch(msg){case U8X8_MSG_DELAY_MILLI://Function which implements a delay, arg_int contains the amount of msDelayxms(arg_int);break;case U8X8_MSG_DELAY_10MICRO://Function which delays 10usDelayxus(10);break;case U8X8_MSG_DELAY_100NANO://Function which delays 100ns__NOP();break;case U8X8_MSG_GPIO_I2C_CLOCK:if (arg_int) IIC_OLED_SCL_HIGH();else IIC_OLED_SCL_LOW();break;case U8X8_MSG_GPIO_I2C_DATA:if (arg_int) IIC_OLED_SDA_HIGH();else IIC_OLED_SDA_LOW();break;default:return 0; //A message was received which is not implemented, return 0 to indicate an error}return 1; // command processed successfully.
}
  1. 更改 u8x8_gpio_and_delay ()
uint8_t u8g2_gpio_and_delay_stm32(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr)
{switch(msg){case U8X8_MSG_DELAY_MILLI://Function which implements a delay, arg_int contains the amount of msDelayxms(arg_int);break;case U8X8_MSG_DELAY_10MICRO://Function which delays 10usDelayxus(10);break;case U8X8_MSG_DELAY_100NANO://Function which delays 100ns__NOP();break;case U8X8_MSG_GPIO_I2C_CLOCK:if (arg_int) IIC_OLED_SCL_HIGH();else IIC_OLED_SCL_LOW();break;case U8X8_MSG_GPIO_I2C_DATA:if (arg_int) IIC_OLED_SDA_HIGH();else IIC_OLED_SDA_LOW();break;default:return 0; //A message was received which is not implemented, return 0 to indicate an error}return 1; // command processed successfully.
}

取模方式

我们如果需要加在图片和特殊字这些需要通过bmp文件取模。
取模这里用的工具是PCtoLCD2002,网上有很多,具体配置如下。

在这里插入图片描述

制作自己的字体库

如果需要制作自己的字体库,参考以下两篇文章。
个人已经成功验证了。
https://blog.csdn.net/acktomas/article/details/132188367
添加链接描述
在这里插入图片描述


http://www.ppmy.cn/news/1579380.html

相关文章

[项目]基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及移植FreeRTOS

基于FreeRTOS的STM32四轴飞行器: 二.项目搭建及debug模块 一.项目搭建二.移植FreeRTOS 一.项目搭建 先配置SYS系统滴答定时器来源为默认,因为其他定时器用来驱动电机了只能与FreeRTOS共用: 之后选择RCC配置芯片的时钟来源: 配置时钟树&am…

MySQL -- 表的约束

概念引入:真正的约束表字段的是数据类型,但是数据类型的约束方式比较单一的,所以需要一些额外的一些约束,用于表示数据的合法性,在只有数据类型一种约束的情况下,我们比较难保证数据是百分百合法。通过添加…

【ARM中R0寄存器】

ARM中R0寄存器 1 RO介绍1.1 R0 的主要作用1 函数返回值2 函数参数3 通用寄存器4 与其他寄存器的区别 1.2 示例 1 RO介绍 在ARM架构中,R0寄存器是一个通用寄存器;是16 个通用寄存器(R0 到 R15)中的第一个,通常用于存储…

面试总结:2024前端面试题

前几天写了一篇对面试官的吐槽,今天来总结一下最近面试的一些题目。题目不分具体公司了,毕竟题目的重复率不会特别高,就多做准备吧。 技术面还是离不开“八股文”,个人不喜欢也没办法,硬着头皮上,下面分几个…

离线服务器ollama新增qwen2:0.5b模型

离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama,其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型,那么如何安装呢? 1.首先在有网的服…

NAFNet:Simple Baselines for Image Restoration

Abstract 近年来,图像复原技术取得了长足的进步,但现有的图像复原方法(SOTA)系统复杂度也在不断增加,不利于对各种方法的分析和比较。在本文中,我们提出了一种简单的基线,它超越了SOTA方法&…

数据库MySQL原理(相关程序)

前言: MySQL数据库在存储数据、读取数据有着优秀的数据结构和算法。 接下来就来深入学习MySQL相关的操作和内部原理。 注:接下来对于mysql的相关操作都是在Linux环境下进行操作!! MySQL常用程序: 众所周知mysql是客户…

Apache Hudi 性能测试报告

一、测试背景 数据湖作为一个集中化的数据存储仓库,支持结构化、半结构化以及非结构化等多种数据格式,数据来源包含数据库数据、增量数据、日志数据以及数仓上的存量数据等。数据湖能够将这些不同来源、不同格式的数据集中存储和管理在高性价比的分布式存储系统中,对外提供…