ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

模块2 STM32程序开发-项目2 STM32 基础应用-任务5 OLED液晶显示

模块2 STM32程序开发-项目2 STM32 基础应用-任务5 OLED液晶显示 基于STM32的物联网环境监测与远程控制系统实训套件-淘宝网任务5 OLED液晶显示一、任务描述本任务基于STM32F103C8T6最小系统板使用0.96 寸 IIC 接口 OLED 液晶屏实现字符、汉字与数据显示。采用PB8 作为 SCL、PB9 作为 SDA的软件 I2C 方式驱动 OLED 模块通过PCtoLCD2002 软件获取汉字字模实现中文、英文、数据的屏幕显示。掌握 STM32 软件 I2C 驱动、OLED 显示、汉字取模等综合开发能力。二、任务目标1. 知识目标1理解 0.96 寸 IIC OLEDSSD1306的显示原理与通信方式。2掌握软件 I2C 与硬件 I2C 的区别。3掌握PB8/PB9 作为普通 GPIO 模拟 I2C 时序的工作原理。4掌握 PCtoLCD2002 汉字取模方式与字模使用方法。5理解 OLED 清屏、显示、刷新机制。2. 能力目标1能够完成 OLED 硬件接线VCC→3.3V、GND、SCL→PB8、SDA→PB9。2能够在不启用硬件 I2C 外设的情况下使用软件 I2C 驱动 OLED。3能够使用 PCtoLCD2002 生成汉字字模并加入工程。4能够实现 OLED 清屏、显示字符串、显示汉字、动态数据刷新。3. 素质目标1养成 “先驱动、再显示、后调试” 的嵌入式开发流程。2提升软件模拟通信、字模制作、显示排版、问题排查能力。3培养严谨规范的显示界面设计习惯。三、任务重难点1. 任务重点1软件 I2C 驱动 OLEDSCLPB8SDAPB9。2无需在 CubeMX 中开启硬件 I2C仅用普通 GPIO 即可通信。3PCtoLCD2002 取模阴码、逐行式、顺向、16×16。4OLED 初始化、清屏、显示字符串、显示汉字。5多内容排版与稳定显示。2. 任务难点1理解软件 I2C 模拟时序原理。2汉字字模格式错误导致显示乱码。3OLED 显存机制与显示位置控制。4避免显示闪烁、花屏、不亮等问题。四、知识准备1. 0.96 寸 IIC OLED 模块介绍0.96 寸 IIC OLED 模块如图1所示屏幕分辨率为 128*64 像素白蓝双色显示驱动芯片为 SSD1306使用 IIC接口用于显示字符、图片等信息。图10.96 寸 IIC OLED 模块驱动芯片SSD1306分辨率128×64通信方式I2C供电3.3V特点自发光、高对比度、无需背光2.软件 I2C 核心知识重点为什么不用配置 CubeMX 也能驱动本任务使用 软件模拟 I2CBit-Banging而不是硬件 I2C 外设。 这就是 PB8、PB9 没有在 CubeMX 中配置 I2C却能驱动 OLED 的根本原因。1软件 I2C 原理不使用 STM32 内部硬件 I2C 控制器。直接将 PB8、PB9 配置为普通 GPIO。通过代码手动控制引脚拉高拉低模拟 I2C 的 SCL、SDA 时序。与硬件 I2C 无关因此 CubeMX 中 I2C2 即使 Disable 也不影响。GPIO 配置软件 I2C 必须__HAL_RCC_GPIOB_CLK_ENABLE();//SCL - PB8GPIO_InitStruct.Pin GPIO_PIN_8;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_OD; // 开漏输出GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);// SDA - PB9GPIO_InitStruct.Pin GPIO_PIN_9;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_OD;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);3为什么 I2C2 是 Disable 也能用STM32F103C8T6 的 硬件 I2C2 只能使用 PB10、PB11。本任务使用 PB8、PB9不属于任何硬件 I2C 的默认引脚。因此 CubeMX 中 I2C2 永远是 Disable但软件 I2C 不受任何影响。软件 I2C 可以使用任意 GPIO不需要对应硬件 I2C 端口。3.软件 I2C 与硬件 I2C 区别硬件 I2C需要 CubeMX 配置固定引脚速度快时序稳定。软件 I2C无需 CubeMX 配置任意引脚都能用适合 OLED 这类低速设备。软件 I2C 与硬件 I2C 区别见表1。表1软件 I2C 与硬件 I2C 区别对比项硬件 I2CCubeMX 配置软件 I2C代码模拟依赖STM32 的硬件 I2C 外设通用 GPIO 引脚CubeMX 配置必须启用对应外设无需配置代码里初始化 GPIO 即可引脚限制必须用特定的 SCL/SDA 引脚如 PB10/PB11任意 GPIO 引脚都可以如 PB8/PB9速度由硬件自动生成时序速度快、稳定靠代码延时速度慢容易受系统影响使用场景高速、稳定的多设备通信低速、GPIO 资源紧张或硬件 I2C 被占用时4. PCtoLCD2002 取字模知识PCtoLCD2002是一款专门用于在LCD及其他显示设备上高效呈现数字图像和文本的取模工具。该软件支持多种中文编码系统包括GB2312、GBK、BIG5等并允许用户自定义字符集。此外它能够处理常见图像格式并提供丰富的参数设置选项以适应不同的显示需求。PCtoLCD2002简化了嵌入式系统和小屏幕设备上的内容显示是开发和设计者在屏幕显示方面的一个重要工具。取模模式汉字模式。格式阴码、列行式、逆向、16×16。输出C51格式。每个汉字占用32 字节16×16。PCtoLCD2002软件配置如图2所示。图2PCtoLCD2002软件配置5.OLED 核心驱动函数OLED_Init(); // 初始化软件I2COLED_Clear(); // 清屏OLED_ShowString(); // 显示字符串OLED_ShowChinese();// 显示汉字OLED_Refresh(); // 刷新屏幕五、硬件连接0.96 寸 IIC OLED 模块与主控STM32F103C8T6的引脚连接如表2所示。表2OLED 模块与主控STM32F103C8T6的引脚连接编号0.96寸_IIC_OLED模块主控STM32F103C8T61VCC3V32GNDGND3SCLPB84SDAPB9硬件连接电路图如图3所示。图3硬件连接电路图六、任务实现任务 5.1 添加 OLED 驱动1.将oled.c文件放到hardware/src目录下。2.将oled.h、oled_Font.h文件放到hardware/inc目录下。3.在项目中添加oled.c文件。4.将PCtoLCD2002 生成的汉字字模存入字模数组见OLED_Font.h文件。任务 5.2 修改 main.c 代码1.添加OLED驱动头文件/* USER CODE BEGIN Includes *///OLED驱动#include oled.h#include oled_font.h/* USER CODE END Includes */2.OLED驱动初始化/* USER CODE BEGIN 2 */OLED_Init(); //OLED驱动初始化printf(任务5 OLED 液晶显示\r\n);/* USER CODE END 2 */3.OLED屏显示信息在/* USER CODE BEGIN 3 */后添加如下代码// 4. OLED 【0.2秒刷新一次】不闪屏 // 第1行温度OLED_ShowChinese(1,1, CHN_WEN);OLED_ShowChinese(1,2, CHN_DU);OLED_ShowChinese(1,3, CHN_MH);OLED_ShowChinese(1,6, CHN_SS); // ℃// 第2行湿度OLED_ShowChinese(2,1, CHN_SHI);OLED_ShowChinese(2,2, CHN_DU);OLED_ShowChinese(2,3, CHN_MH);OLED_ShowChinese(2,6, CHN_BF); // %// 第3行光照OLED_ShowChinese(3,1, CHN_GUANG);OLED_ShowChinese(3,2, CHN_ZHAO);OLED_ShowChinese(3,3, CHN_MH);// 第4行知物学苑OLED_ShowChinese(4,3, CHN_Z);OLED_ShowChinese(4,4, CHN_W);OLED_ShowChinese(4,5, CHN_X);OLED_ShowChinese(4,6, CHN_Y);if(HAL_GetTick() - oled_timer 200) // 200ms 刷新一次{oled_timer HAL_GetTick();if(temp!0)OLED_ShowNum(1,6, temp, 2);if(humi!0)OLED_ShowNum(2,6, humi, 2);if(Value_GY30()!0)OLED_ShowNum(3,6,light,4); // 光照一般 0-65535用4位}任务 5.3 编译、下载、查看结果1.点击编译按钮编译程序。2.点击下载按钮下载程序。3.打开串口调试助手按stm32f103c8t6主控板上的复位键在串口调试助手中输出打印信息如图4所示。同时可以在OLED屏上看到显示的信息如图5所示。图4输出打印信息图5 OLED屏显示信息
返回列表