STM32 了解OLED

内容扩展

复制代码
调试方式串口调试:通过串口调试,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
显示屏调试:直接将显示屏连接到单片机,将调试信息打印到显示屏上
keil调试模式:借助Keil软件的调试模式,可使用单步运行,设置断点,查看寄存器及变量

OLED简介

有机发光二极管

OLED显示屏:性能优异的新型显示屏,具有功耗低,响应速度快,宽视角,轻薄柔韧等特点

常用通信协议:I2C/SPI

分辨率:128*64

硬件连接

STM32 与 OLED 屏幕的 I2C 接口连接方式如下:

复制代码
VCC -> STM32 3.3VGND -> STM32 GNDSCL -> STM32 I2C1_SCL(或 I2C2_SCL)SDA -> STM32 I2C1_SDA(或 I2C2_SDA)

代码实现

  1. I2C 初始化

首先,配置 I2C 外设,确保 STM32 可以正确地与 OLED 屏幕通信。

复制代码
#include "stm32f10x.h"void I2C_Configuration(void) {    I2C_InitTypeDef I2C_InitStructure;    GPIO_InitTypeDef GPIO_InitStructure;        // 使能 I2C1 和 GPIOB 时钟    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        // 配置 I2C1 的 SCL 和 SDA 引脚    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // SCL, SDA    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;         // 开放集电极模式    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_Init(GPIOB, &GPIO_InitStructure);        // I2C1 配置    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;    I2C_InitStructure.I2C_OwnAddress1 = 0x00;    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;    I2C_Init(I2C1, &I2C_InitStructure);    // 使能 I2C1    I2C_Cmd(I2C1, ENABLE);}
  1. OLED 初始化

接下来,我们需要初始化 OLED 显示屏,使其能够正确显示。

复制代码
#include "ssd1306.h" // 假设我们已经有了 SSD1306 驱动库void OLED_Init(void) {    ssd1306_Init(); // 初始化 SSD1306 OLED 屏幕    ssd1306_Clear(); // 清空显示屏    ssd1306_UpdateScreen(); // 刷新显示屏}
  1. 显示文本

使用 SSD1306 驱动库提供的函数,可以在 OLED 屏幕上显示文本。

复制代码
void OLED_DisplayText(void) {    ssd1306_SetCursor(0, 0); // 设置光标位置    ssd1306_WriteString("STM32 OLED", Font_7x10, White); // 写入字符串    ssd1306_SetCursor(0, 20);    ssd1306_WriteString("Hello World!", Font_7x10, White);    ssd1306_UpdateScreen(); // 更新屏幕内容}

主函数

整合以上代码,在main() 函数中进行初始化并显示内容。

复制代码
int main(void) {    // 初始化系统时钟、I2C、OLED    SystemInit();    I2C_Configuration();    OLED_Init();
    // 显示文本    OLED_DisplayText();

    while(1) {        // 程序主循环    }}
相关推荐
MAR-Sky4 分钟前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗2 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞2 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技3 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天4 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)4 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术5 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao5 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报6 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110113 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件