STM32芯片驱动的OLED显示屏驱动库设计与实现

张开发
2026/5/21 21:44:44 15 分钟阅读
STM32芯片驱动的OLED显示屏驱动库设计与实现
一、驱动库概述在STM32项目中OLED显示屏如0.96寸SSD1306是常用的可视化组件其驱动库需实现初始化、字符/图形显示、屏幕刷新等核心功能。本驱动库基于STM32 HAL库开发支持I2C接口的SSD1306 OLED128×64分辨率具有轻量级、易移植、高兼容性特点适用于STM32F1/F4系列单片机如STM32F103C8T6、STM32F407ZGT6。二、核心参数与兼容性参数说明OLED型号0.96寸SSD1306128×64像素I2C接口接口类型I2C默认地址0x3C或0x3D取决于硬件焊接分辨率128列×64行每页8行共8页工作电压3.3V与STM32共地驱动库名称ssd1306.h含ssd1306.c实现文件依赖库STM32 HAL库I2C、GPIO、延时函数三、驱动库核心功能驱动库采用模块化设计主要包含以下功能1.初始化函数SSD1306_Init(void)初始化I2C接口、配置SSD1306寄存器如设置显示模式、对比度、扫描方向清屏并开启显示。关键步骤发送初始化命令如0xAE关闭显示、0xD5设置时钟分频、0x81设置对比度支持I2C地址自动检测尝试0x3C/0x3D成功则返回0。2.显示控制函数SSD1306_Clear(void)清屏所有像素置0需配合SSD1306_UpdateScreen生效SSD1306_UpdateScreen(void)将显存缓冲区数据刷新到OLED屏幕I2C传输SSD1306_GotoXY(uint8_t x, uint8_t y)设置光标位置x0-127列y0-7页每页8行SSD1306_Puts(char \*str, FontDef \*font, uint8_t color)显示字符串str字符串font字体color颜色0黑1白SSD1306_DrawPixel(uint8_t x, uint8_t y, uint8_t color)画单个像素x0-127y0-63。3.字体与图形支持内置字体提供Font_7x107列×10行适合小屏幕、Font_11x1811列×18行等常用字体图形绘制支持画直线SSD1306_DrawLine、矩形SSD1306_DrawRectangle、圆形SSD1306_DrawCircle等需自行扩展。四、驱动库使用示例STM32 HAL库1.硬件接线OLED引脚STM32引脚功能VCC3.3V电源GNDGND地SCLPB8I2C1I2C时钟SDAPB9I2C1I2C数据2.代码实现1初始化I2C与OLED#includestm32f1xx_hal.h#includessd1306.hI2C_HandleTypeDef hi2c1;// I2C1句柄voidI2C1_Init(void){hi2c1.InstanceI2C1;hi2c1.Init.ClockSpeed100000;// 100kHzhi2c1.Init.DutyCycleI2C_DUTYCYCLE_2;hi2c1.Init.OwnAddress10;hi2c1.Init.AddressingModeI2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressModeI2C_DUALADDRESS_DISABLE;hi2c1.Init.GeneralCallModeI2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchModeI2C_NOSTRETCH_DISABLE;HAL_I2C_Init(hi2c1);}intmain(void){HAL_Init();SystemClock_Config();I2C1_Init();// 初始化SSD1306I2C地址0x3Cif(SSD1306_Init(0x3C)!0){Error_Handler();// 初始化失败}SSD1306_Clear();// 清屏SSD1306_UpdateScreen();// 刷新while(1){// 显示示例Display_Example();HAL_Delay(1000);}}2显示温湿度数据参考“STM32驱动DHT11”项目#includessd1306.h#includefont.h// 包含Font_7x10定义voidDisplay_Data(uint8_ttemp_int,uint8_ttemp_dec,uint8_thumi_int,uint8_thumi_dec){charbuf[20];// 显示温度如“T:25.0℃”sprintf(buf,T:%d.%dC,temp_int,temp_dec);SSD1306_GotoXY(0,0);// 第0页0-7行、第0列SSD1306_Puts(buf,Font_7x10,SSD1306_COLOR_WHITE);// 显示湿度如“H:60%”sprintf(buf,H:%d.%d%%,humi_int,humi_dec);SSD1306_GotoXY(0,2);// 第2页16-23行、第0列SSD1306_Puts(buf,Font_7x10,SSD1306_COLOR_WHITE);SSD1306_UpdateScreen();// 刷新屏幕}参考代码 STM32芯片驱动的OLED显示屏驱动库www.youwenfan.com/contentcss/183224.html五、驱动库扩展与优化SPI接口支持若OLED为SPI接口如1.3寸SSD1306可修改ssd1306.c中的通信函数用SPI替代I2C低功耗优化空闲时关闭OLED显示SSD1306_DisplayOff需要时再开启图形库扩展添加bmp.h头文件支持显示位图如公司logo滚动文本实现SSD1306_ScrollHorizontal水平滚动、SSD1306_ScrollVertical垂直滚动。六、总结本驱动库是STM32驱动SSD1306 OLED的基础方案通过I2C通信实现高效显示支持字符串、图形、像素级操作适用于环境监测、智能手表、工业仪表等场景。其易移植性仅需修改I2C引脚与低资源占用RAM2KB使其成为STM32项目的首选OLED驱动方案。

更多文章