一、实验目的:
1、了解I2C协议的基本原理和时序协议;
2、掌握0.96寸OLED屏的工作原理,汉字点阵显示原理;
3、掌握开源GUI库U82G在stm32上的移植编译方法,以及图形界面可视化技术。
二、具体过程
1、利用stm32f103的GPIO管脚、VCC和GND连接 OLED屏的I2C接口,采用cubemx设计一个HAL库程序框架,然后下载U8G2源码,针对stm32f103和 0.96寸的I2C接口OLED屏,进行代码裁剪,然后移植到HAL程序程序中,完成OLED的各种显示,包括:
1)U82G的demo例程; 2)显示你自己的学号和名字(或网名昵称);3)掌握上下、左右滑动显示方法;4)显示一个图案(比如你的头像肖像),最好有动态效果。
使用u8g2生成代码
STM32CubeMX 配置
- 打开STM32CubeMX,选择你的STM32F103型号,配置时钟、GPIO管脚和I2C接口。
- 启用I2C外设,并配置相应的引脚连接和速度设置。
- 生成代码并打开生成的工程。
U8G2库的裁剪和移植
- 下载U8G2库的源码,并找到针对STM32的示例代码或相关驱动部分。
- 根据你的OLED屏的参数(比如分辨率、通信接口等),裁剪U8G2库,只保留你需要的部分代码。
- 将裁剪后的U8G2库源码文件添加到你的STM32项目中,确保文件路径正确。
在STM32项目中初始化和使用U8G2库
// 包含U8G2头文件
#include "u8g2.h"
// 定义并初始化U8G2对象
u8g2_t u8g2;
// 初始化函数
void u8g2_init() {
u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_hw_i2c, u8x8_gpio_and_delay_stm32);
u8g2_InitDisplay(&u8g2);
u8g2_SetPowerSave(&u8g2, 0);
}
// 1)U82G的demo例程
void display_demo() {
u8g2_ClearBuffer(&u8g2);
u8g2_DrawStr(&u8g2, 0, 10, "Hello World!");
u8g2_SendBuffer(&u8g2);
}
// 2)显示你自己的学号和名字(或网名昵称)
void display_student_info() {
u8g2_ClearBuffer(&u8g2);
u8g2_DrawStr(&u8g2, 0, 10, "学号: 123456");
u8g2_DrawStr(&u8g2, 0, 30, "名字: 张三");
u8g2_SendBuffer(&u8g2);
}
// 3)上下、左右滑动显示方法
void slide_text(const char* text) {
// 实现滑动显示的逻辑
}
// 4)显示一个图案,最好有动态效果
void display_image_with_dynamic_effect() {
// 显示图案并实现动态效果
}
// 主函数
int main(void) {
HAL_Init();
// 其他初始化代码...
u8g2_init(); // 初始化U8G2库
while (1) {
display_demo(); // 显示demo例程
HAL_Delay(2000);
display_student_info(); // 显示学号和名字
HAL_Delay(2000);
slide_text("滑动文本"); // 上下、左右滑动显示
HAL_Delay(2000);
display_image_with_dynamic_effect(); // 显示图案并实现动态效果
HAL_Delay(2000);
}
}
2. 如果使用Keil的虚拟逻辑分析仪去采集 I2C 引脚SDA的波形,是什么样子的? 如果无法采集到真实的I2C协议,你觉得可改用什么方法?
虚拟逻辑分析仪更多用于监控和分析软件变量,而不是直接采集硬件信号(如I2C SDA线上的实际电压波形)。虚拟逻辑分析仪可以帮助你查看寄存器和变量的值变化,但要看到真实的I2C通信波形,通常需要一个专门的硬件工具。
如果用Keil的虚拟逻辑分析仪来获取某种形式的I2C活动你可以通过记录与I2C通信相关的状态或变量的变化。例如,在你的I2C传输代码中添加一些标志位或计数器,然后在逻辑分析仪中观察这些变量的变化。
示波器可以显示I2C信号的电压波形。虽然它没有逻辑分析仪那样的协议解码功能,但对于查看信号质量和时序仍然非常有用。
步骤:
- 将示波器探头连接到I2C的SCL和SDA引脚,确保探头地线连接好。
- 设置示波器的触发条件(例如上升沿触发)。
- 执行你的I2C通信操作,然后观察示波器屏幕上的波形。
作者水平有限,不足之处欢迎指正。