STM32使用u8g2
STM32移植u8g2
1、下载:https://github.com/olikraus/u8g2
2、只保留 csrc 目录,将 u8x8_d_ 开头的文件删除,只保留 ssd1306_128x64_noname.c,然后添加到Keil项目中
3、修改 u8x8_setup.c
如果是 i2c,只保留
如果是 spi,只保留
函数最后的数字或字母,代表显示时的buf大小:
1:128字节
2:256字节
f:1024字节
裸机代码示例
RT-Thread + u8g2 示例
在 RT-Thread 上使用单色屏 UI 库 - U8G2_rthread u8g2-CSDN博客
注意配置好时钟


#define BSP_USING_I2C1
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN GET_PIN(B, 6)
#define BSP_I2C1_SDA_PIN GET_PIN(B, 7)
#endifvoid I2C1_GPIO_INIT(void)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef gpio_initstruct;
// 初始化SCL
gpio_initstruct.Pin = GPIO_PIN_6;
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_OD;
gpio_initstruct.Pull = GPIO_PULLUP;
gpio_initstruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB, &gpio_initstruct);
// 初始化SDA
gpio_initstruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOB, &gpio_initstruct);
}
在shell工具中输入u8g2_ssd1306_12864_sw_i2c_example 然后回车就可以看见了
FreeRTOS + u8g2 示例
GD32使用u8g2
gd32移植u8g2
基于STM32移植U8g2图形库——OLED显示(HAL库)_stm32 u8g2-CSDN博客
指令
初始化
u8g2_t u8g2; //显示器初始化结构体
u8g2Init(&u8g2); //初始化函数开/关显示
u8g2_SetPowerSave(&u8g2,0);清屏
u8g2_ClearDisplay(); 清除缓冲区(帧数据)
u8g2.clearBuffer();写入缓冲区
u8g2_SendBuffer(); 发送指令
u8g2_SendF("c", 0x0a7);设置
配置设置
u8g2.enableUTF8Print(); //设置启用UTF-8支持 u8g2.disableUTF8Print(); //设置停用UTF-8支持 u8g2_SetContrast(); //设置显示屏亮度/对比度(0-255) u8g2_SetBusClock(); //设置连接速度(IIC:200000-400000/SPI:1000000-8000000),在begin()之前调用
设置字体
u8g2_SetFontMode(0); //定义字体背景模式,仅u8g2_xxx_tX字体支持,默认0,禁用透明
u8g2_SetFontDirection(0); //旋转当前显示 参数:0/1/2/3
u8g2_SetFont(u8g2_font_unifont_t_chinese2); //设置字体
u8g2_SetFontPosCenter(); //设置字体基线Center/Baseline/Bottom/Top设置颜色
u8g2_SetDrawColor(1); //设置颜色,0透显,1实显,2XOR (drawCircle,drawDisc,drawEllipse和drawFilledEllipse不支持XOR模式)绘制
绘制文本
u8g2_DrawStr(x, y, "文本"); // 绘制文本字符,不能绘制编码大于或等于256,绘制文本前需定义字体.y轴向上绘制
u8g2_DrawUTF8(x, y,"字符"); // 绘制一个编码为UTF-8的字符串.注意1.编译器支持2.代码编辑器支持
u8g2_DrawGlyph(x, y, HEX); // 绘制特殊文本图标(需联合特殊字体)
u8g2.print(); // 打印文本字符(需要联合光标位置setCursor,setFont)支持变量和F()
绘制点
u8g2_DrawPixel(x, y); // 在xy位置绘制一个像素. 绘制线条
u8g2_DrawHLine(x, y, w); // 绘制水平线 w长度
u8g2_DrawVLine(x, y, h); // 绘制垂直线 h高度
u8g2_DrawLine(x1, y1, x2, y2); // 画自由线 x1y1点1 x2y2点2绘制矩形
u8g2_DrawBox(x, y, w, h); // 画填充矩形w,h,宽度,高度 2 u8g2_DrawFrame(x, y, w, h); // 画空心矩形w,h,宽度,高度绘制圆/椭圆
u8g2_DrawCircle(圆心x, 圆心y, 半径rad, 部分位置U8G2_DRAW_ALL); // 画空心圆 rad半径 直径为 2rad+1
u8g2_DrawEllipse(圆心x, 圆心y, 椭圆长度x, 椭圆宽度y, 部分位置U8G2_DRAW_ALL) //画空心椭圆 长度和宽度均为整个圆的1/2
U8G2_DRAW_ALL /*替换参数:
U8G2_DRAW_ALL 全部
U8G2_DRAW_UPPER_RIGHT 上右
U8G2_DRAW_UPPER_LEFT 上左
U8G2_DRAW_LOWER_RIGHT 下右
U8G2_DRAW_LOWER_LEFT 下左*/绘制多边形
u8g2_DrawTriangle(x1,y1,x2,y2,x3,y3); //三个点的坐标,实心绘制位图
u8g2_DrawXBM( x, y, w, h, bits); //bits是位图资源表,setBitmapMode(1)切换为旧模式组件
按键
u8g2.userInterfaceInputValue("标题","提示文本",值,最低值,最高值,值的位数,"文本") //按键消息菜单
u8g2.userInterfaceMessage("Title1", "Title2", "Title3", " Ok \n Cancel "); //按键确认菜单
u8g2.userInterfaceSelectionList("Title", 默认选择项, "Select1\Select2\Select3"); //按键选择菜单
其它API
u8g2.getBufferSize (); //返回页面缓冲区的大小,等于8*u8g2.getBufferTileHeight*u8g2.getBufferTileWidth
u8g2_SetBufferPtr(buf); //指向内部页面缓冲区开始位的指针