You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F103外接I2C SSD1306 64x32 LCD仅半屏显示故障排查

64x32 SSD1306 LCD显示异常问题排查与解决

问题背景

将64x32分辨率的SSD1306 LCD通过I2C连接至STM32F103,尝试在屏幕上显示文本与线条时,仅能看到一半内容,怀疑初始化代码存在问题。

初始化代码

SSD1306_WRITECOMMAND(0xAE); //display off

SSD1306_WRITECOMMAND(0x20); //Set Memory Addressing Mode
SSD1306_WRITECOMMAND(0x00); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid

SSD1306_WRITECOMMAND(0xB0); //Set Page Start Address for Page Addressing Mode,0-7

SSD1306_WRITECOMMAND(0xC0); //mirror vert
SSD1306_WRITECOMMAND(0x40); //--set start line address

SSD1306_WRITECOMMAND(0x81); //--set contrast control register
SSD1306_WRITECOMMAND(0xFF);

SSD1306_WRITECOMMAND(0xA0); //--set segment re-map 0 to 127

SSD1306_WRITECOMMAND(0xA6); //--set normal display

SSD1306_WRITECOMMAND(0xA8); //--set multiplex ratio(1 to 64)
SSD1306_WRITECOMMAND(0x1F); //32 active line on display

SSD1306_WRITECOMMAND(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content

SSD1306_WRITECOMMAND(0xD3); //-set display offset
SSD1306_WRITECOMMAND(0x00); //-not offset

SSD1306_WRITECOMMAND(0xD5); //--set display clock divide ratio/oscillator frequency
SSD1306_WRITECOMMAND(0xF0); //--set divide ratio

SSD1306_WRITECOMMAND(0xD9); //--set pre-charge period
SSD1306_WRITECOMMAND(0x22); //

SSD1306_WRITECOMMAND(0xDA); //--set com pins hardware configuration
SSD1306_WRITECOMMAND(0x12);

SSD1306_WRITECOMMAND(0xDB); //--set vcomh
SSD1306_WRITECOMMAND(0x20); //0x20,0.77xVcc

SSD1306_WRITECOMMAND(0x8D); //--set DC-DC enable
SSD1306_WRITECOMMAND(0x14); //
SSD1306_WRITECOMMAND(0xAF); //--turn on SSD1306 panel

/* Clear screen */
SSD1306_Fill(SSD1306_COLOR_BLACK);

/* Update screen */
SSD1306_UpdateScreen();

/* Set default values */
SSD1306.CurrentX = 0;
SSD1306.CurrentY = 0;

主程序代码

char* strin3 = "01234567";
SSD1306_Init();
SSD1306_GotoXY(0,0);
SSD1306_Puts(strin3, &Font_7x10, 1);
SSD1306_UpdateScreen();

SSD1306_DrawLine(1,1,63,31,1);
SSD1306_UpdateScreen();

故障现象

  • 屏幕仅显示一半内容
  • 发送0xA5指令(全屏点亮,忽略RAM内容)时屏幕可完全填充
  • 调整垂直偏移、垂直镜像等参数,仅能改变显示位置,但无法让完整内容显示

最终解决方案

该小型显示屏的有效水平内存区域位于SSD1306默认128x64内存区域的中间,将所有显示数据输出到32至96列的内存区域后,屏幕显示恢复正常。

内容的提问来源于stack exchange,提问作者TeachmeDaddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:12:38