【STM32 HAL库】OLED显示模块
【STM32 HAL库】OLED显示模块
- 前言
- 理论
- OLED基本参数
- OLED基本驱动原理
- OLED坐标轴
- 应用
- CubeMx配置
- 底层函数代码
- 高层封装函数
- printf显示函数
前言
本文为笔者学习 OLED 的总结,基于keysking的视频内容,如有错误,欢迎指正
理论
OLED基本参数
分辨率
常见的oled显示模块的分辨率为128*64,即横向128个像素点,纵向64个像素点
OLED基本驱动原理
OLED坐标轴
应用
CubeMx配置
底层函数代码
OLED驱动的底层函数代码通常由厂商提供,只需理解并调用相应函数即可
在这里我贴一下我使用的OLED_SSD1306驱动
,由keysking提供
高层封装函数
printf显示函数
/**
* @brief 类似printf函数,在 OLED 指定行和列处打印格式化的字符串
*
* @param line OLED 显示的行数(从 0行 开始),每行高度为 16 像素
* @param column OLED 显示的列号(从 0列 开始),每列宽度为 8 像素
* @param format 格式化字符串,必须加双引号,类似 `printf` 的入参格式。
* @param ... 可变参数,用于替换 `format` 字符串中的占位符。
*
* @note 该函数使用 `vsprintf` 进行字符串格式化,`buffer` 大小为 128 字节。`OLED_PrintString` 函数将最终的字符串显示在 OLED 上,使用 16x16 的字体和常规显示模式。
*/
void OLED_printf(uint8_t line, uint8_t column, const char *format, ...)
{
uint8_t x = column * 8; // 将列号转换为像素坐标
uint8_t y = line * 16; // 将行号转换为像素坐标
char buffer[128]; // 用于存储格式化后的字符串
va_list args; // 定义可变参数列表
// 初始化可变参数列表
va_start(args, format);
// 使用 vsprintf 将格式化后的内容写入 buffer
vsprintf(buffer, format, args);
// 结束可变参数处理
va_end(args);
// 将格式化后的字符串显示在 OLED 上
OLED_PrintString(x, y, buffer, &font16x16, OLED_COLOR_NORMAL);
}
接下来补充说明一下可变参数
...
为可变参数,...
本身并不是一种特定的类型,而是表示参数列表的可变性。允许在运行时接收任意数量和类型的参数,具体类型由传入的参数决定。
...
可接收任意数量和类型的参数,但参数与参数直接需用,
分隔。
定义args
为va_list
类型(可变参数列表),用于存储任意数量和类型的可变参数。
va_start(args,format);
将可变参数列表args
的开始索引指向format
参数的下一位(下一位就是...
可变参数的原因与函数调用约定和栈布局有关,不用深究。
va_start(args, format);
初始化args
,将列表开始索引指向format
参数的下一位,(表示这后续的参数都是args
。
vsprintf(buffer, format, args);
先扫描format
字符串并读取其占位符—>再读取args
中的可变参数并填入占位符—>最后将格式化后的结果写入buffer
字符串。
va_end(args);
用于结束可变参数处理,释放资源。为保证代码的可移植性和规范性,处理完可变参数后应调用。