STM32硬件I2C驱动0.96寸OLED屏幕
0.96寸OLED屏幕0.96寸屏幕对角线长0.96英寸驱动SSD1306驱动IC驱动芯片内置128*64的SRAM存储器用于缓存要显示的数据分辨率128*64横128竖64供电3.3V驱动内部内置升压电路会将3.3升到7需要与stm32共地GND接在stm32上针脚4脚GND、VCC、SCL、SDA从机地址0x78指令操作前缀先发0x00表示后面的内容是对SSD1306驱动的控制命令先发0x40表示后面的内容是要显示的数据显示流程页列显示每列会以从上到下上面是低位下面的高位的方式显示显示8bit后自动换到右边的列重复流程。超过第127列后自动从本页开头覆盖显示不自动跳页。1亮0暗。显示操作对目标列进行显示需要写命令操作。对页操作命令高五位是101100xB0时命令低三位则是页8行地址。页地址范围是0~8。对列操作命令高四位为00010x10时命令低四位则为x坐标的高四位。命令高四位为00000x00时命令低四位则为x坐标的低四位。硬件I2CSTM32F106C8T6的I2C资源I2C1、I2C2。I2C1的SCL引脚是GPIOB_Pin_6I2C1的SDA引脚是GPIOB_Pin_7。I2C1的SCL引脚是GPIOB_Pin_10I2C1的SDA引脚是GPIOB_Pin_11。引脚配置开漏输出输出SDA、SCL工作流程启动等待启动——7位地址读写操作0写1读等待发送完成——传输数据.等待传输数据完成....——停止数据传输方式高位先行工作原理启动条件SCL高时下拉SDA停止条件SCL高时上拉SDA发送数据在完成启动条件后在SCL高电平时会发送SDA的数据0/1在SCL低电平时更改SDA上的数据0/1。发送方发送完一位数据8bit后需要接收方发送接收应答0/10应答1不应答然后发送发接收这个应答位来判断发送的数据是否被读取。硬件资源特质硬件I2C的收发不需要人为注意应答位但需要等待各个阶段操作后的标志位生成这类似于等待软件的应答位。细节注意SCL由STM32控制所以就算是从机要发送应答也是由STM32改变SCL的电平去加载数据同时需要STM32去释放对SDA的控制拉高SDA当STM32是发送方时STM32在SCL高电平时发送SDA的数据而从机在这个时候读取SDA的数据而当从机OLED是发送方时OLED将在SCL高电平时发送的数据STM32在SCL低时接收SDA的数据当STM32是接收方时STM32发送的应答位0继续发/1别发了与从机是接收方是从机发送的应答位0收到了/1没收到的含义不同。软件模拟和硬件实现的区别软件由个人自己写函数具体看STM32软件模拟I2C驱动0.96寸OLED屏幕-CSDN博客① 启动条件② 发送从机地址读写③ 发送数据/指令④终止条件硬件使用已有的函数一切等待的格式都是while( (I2Cx,等待事件的名称) ERROR )①判断总线是否忙while死循环函数while (I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));②启动条件等待启动完成函数I2C_GenerateSTART (I2C2, ENABLE);while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT) ERROR);③从机地址写入等待发送完成0x78是OLED的从机地址I2C_Direction_Transmitter是发送模式即写入模式函数I2C_Send7bitAddress(I2C2,0X78,I2C_Direction_Transmitter);while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) ERROR);④指令地址/数据地址等待发送完成根据传参addr来判断 后面输入的数据data 是 对SSD1306操作的指令 还是 OLED要显示的内容函数I2C_SendData(I2C2,addr);while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING) ERROR);//等待数据的发送完成⑤data等待发送完成根据前面addr的操作地址 来确认data 是 对SSD1306操作的指令 还是 OLED要显示的内容函数I2C_SendData(I2C2,data);while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR);⑥结束函数I2C_GenerateSTOP (I2C2,ENABLE);主要代码硬件I2C及其GPIO口的初始化void MyI2C_Init(void){/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE); //开启I2C2的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_OD;GPIO_InitStructure.GPIO_Pin GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure); //将PB10和PB11引脚初始化为复用开漏输出/*I2C初始化*/I2C_InitTypeDef I2C_InitStructure; //定义结构体变量I2C_InitStructure.I2C_Mode I2C_Mode_I2C; //模式选择为I2C模式I2C_InitStructure.I2C_ClockSpeed 50000; //时钟速度选择为50KHzI2C_InitStructure.I2C_DutyCycle I2C_DutyCycle_2; //时钟占空比选择Tlow/Thigh 2I2C_InitStructure.I2C_Ack I2C_Ack_Enable; //应答选择使能I2C_InitStructure.I2C_AcknowledgedAddress I2C_AcknowledgedAddress_7bit; //应答地址选择7位从机模式下才有效I2C_InitStructure.I2C_OwnAddress1 0x00; //自身地址从机模式下才有效I2C_Init(I2C2, I2C_InitStructure); //将结构体变量交给I2C_Init配置I2C2/*I2C使能*/I2C_Cmd(I2C2, ENABLE); //使能I2C2开始运行}字节发送void OLED_Byte_Write(uint8_t addr, uint8_t data){while (I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)); //检查I2C总线是否繁忙I2C_GenerateSTART (I2C2, ENABLE); //产生起始信号while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT) ERROR);//EV5事件被检测,发送设备地址I2C_Send7bitAddress(I2C2,0X78,I2C_Direction_Transmitter);//第几个i2c i2c通信的从机地址 写/发送模式模式选择0写/1读while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) ERROR);//等待 7bit从机地址1位读写操作 的指令发送完成//EV6事件被检测,发送要操作的存储单元地址I2C_SendData(I2C2,addr);//根据传参addr来判断 后面输入的数据data 是 对SSD1306操作的指令 还是 OLED要显示的内容while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING) ERROR);//等待数据的发送完成//EV8事件被检测,发送要存储的数据I2C_SendData(I2C2,data);//根据前面addr的操作地址 来确认data 是 对SSD1306操作的指令 还是 OLED要显示的内容while(I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR);//等待数据的发送完成//数据传输完成I2C_GenerateSTOP (I2C2,ENABLE);//结束发送}发送命令/数据void OLED_WriteCommand(uint8_t IIC_Command){OLED_Byte_Write(0x00, IIC_Command);//先发0x00表示后面的内容是对SSD1306驱动的控制命令}void OLED_WriteData(uint8_t IIC_Data){OLED_Byte_Write(0x40, IIC_Data);//先发0x40表示后面的内容是要显示的数据}指定页列显示void OLED_SetCursor(uint8_t pag, uint8_t x){//命令高五位是10110时命令低三位则是页地址。页地址范围是0~8OLED_WriteCommand(0xB0 | pag);//取出数据低四位//命令高四位为0001时命令低四位则为x坐标的高四位。OLED_WriteCommand(0x10 | (x 0xF0) 4);//取出数据高四位//命令高四位为0000时命令低四位则为x坐标的低四位OLED_WriteCommand(0x00 | (x 0x0F));//取出数据低四位}OLED初始化参考自江科大但是多次运行后显示起点终点有误且会自动换页void OLED_Init(){uint32_t i, j;for (i 0; i 1000; i)for (j 0; j 1000; j);//上电延时MyI2C_Init(); //GPIO端口初始化OLED_WriteCommand(0xAE); //关闭显示OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率OLED_WriteCommand(0x80);OLED_WriteCommand(0xA8); //设置多路复用率OLED_WriteCommand(0x3F);OLED_WriteCommand(0xD3); //设置显示偏移OLED_WriteCommand(0x00);OLED_WriteCommand(0x40); //设置显示开始行OLED_WriteCommand(0xA1); //设置左右方向0xA1正常 0xA0左右反置OLED_WriteCommand(0xC8); //设置上下方向0xC8正常 0xC0上下反置OLED_WriteCommand(0xDA); //设置COM引脚硬件配置OLED_WriteCommand(0x12);OLED_WriteCommand(0x81); //设置对比度控制OLED_WriteCommand(0xCF);OLED_WriteCommand(0xD9); //设置预充电周期OLED_WriteCommand(0xF1);OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别OLED_WriteCommand(0x30);OLED_WriteCommand(0xA4); //设置整个显示打开/关闭OLED_WriteCommand(0xA6); //设置正常/倒转显示OLED_WriteCommand(0x8D); //设置充电泵OLED_WriteCommand(0x14);OLED_WriteCommand(0xAF); //开启显示for (i 0; i 1000; i) //上电延时for (j 0; j 1000; j);}

相关新闻

乌鲁木齐无人应用技术专业学校选择经验分享

乌鲁木齐无人应用技术专业学校选择经验分享

引言随着低空经济的蓬勃发展,无人机技术已渗透至农业植保、电力巡检、物流配送等多个领域,专业人才需求激增。对于希望进入这一行业的学习者来说,选择一所合适的无人机技校至关重要。本文将基于亲身体验及行业调研,为读者提供一份…

2026/7/30 17:45:34 阅读更多 →
多机器人协同编队控制:领航追随法与Matlab实现

多机器人协同编队控制:领航追随法与Matlab实现

1. 项目概述:多机器人协同编队控制的核心挑战多移动机器人协同编队控制是当前智能机器人领域的前沿研究方向,特别是在物流仓储、灾害救援和军事侦察等场景中具有重要应用价值。这个项目通过Matlab仿真环境,实现了基于领航追随法(L…

2026/7/30 17:45:33 阅读更多 →
2026年辽宁智慧燃气安全监测服务商甄选指南

2026年辽宁智慧燃气安全监测服务商甄选指南

辽宁作为东北老工业基地核心省份,燃气管网总里程超10万公里。沈阳、大连、鞍山等城市存在大量服役超30年的老旧管线,管道腐蚀和泄漏风险突出。冬季严寒期长达5个月,供暖季天然气消费量巨大,与燃气发电、工业用气叠加形成多重用气高…

2026/7/30 17:44:33 阅读更多 →

最新新闻

AI财务分析从0到1:7步构建高精度预测模型,附可复用Python代码库

AI财务分析从0到1:7步构建高精度预测模型,附可复用Python代码库

更多请点击: https://intelliparadigm.com 第一章:AI财务分析从0到1:核心范式与业务价值 AI财务分析并非简单地将机器学习模型套用于财务报表,而是重构财务决策的认知框架——以数据驱动替代经验驱动,以实时预测替代滞…

2026/7/30 17:54:36 阅读更多 →
紧急修复!AI配音项目交付前最后30分钟停顿微调清单(含Audacity+Whisper联合校验模板)

紧急修复!AI配音项目交付前最后30分钟停顿微调清单(含Audacity+Whisper联合校验模板)

更多请点击: https://intelliparadigm.com 第一章:AI配音停顿设置的底层逻辑与交付红线 AI配音中的停顿并非简单插入静音片段,而是由语音合成引擎在文本韵律建模(Prosody Modeling)阶段协同完成的多维度决策结果。其底…

2026/7/30 17:54:36 阅读更多 →
git Update project 报错

git Update project 报错

git Update project 报错 9:17 Update failed remote: The project you were looking for could not be found. repository ‘http://xxxx/xxxxxxxxx.git/’ not found 9:17 Update canceled 删除 origin 远程仓库 git remote remove origin 添加新的 origin 地址(替…

2026/7/30 17:54:36 阅读更多 →
Flutter 扫描二维码

Flutter 扫描二维码

在今天的移动开发中,二维码扫描已经成为了常见的功能之一。Flutter作为一款跨平台的开发框架,提供了丰富的插件和功能,使得开发者可以轻松实现二维码扫描以及图像识别功能。本文将介绍如何在Flutter中通过结合 scan 插件、permission_handler…

2026/7/30 17:54:36 阅读更多 →
HarmonyOS PromptAction 弹窗不显示怎么办:UIContext、页面销毁和回调兜底怎么拆

HarmonyOS PromptAction 弹窗不显示怎么办:UIContext、页面销毁和回调兜底怎么拆

# HarmonyOS PromptAction 弹窗不显示怎么办:UIContext、页面销毁和回调兜底怎么拆弹窗问题很容易被写成“接口没生效”,但我实际排查时更常见的是上下文已经不对了:按钮点击时页面还在,异步请求回来时页面可能已经返回&#xff1…

2026/7/30 17:54:35 阅读更多 →
Windows 超详细安装 d2l 踩坑全记录|d2l0.17.6 /d2l1.0.3 依赖冲突、pandas 编译失败、numpy 与 OpenCV 版本不兼容一站式解决

Windows 超详细安装 d2l 踩坑全记录|d2l0.17.6 /d2l1.0.3 依赖冲突、pandas 编译失败、numpy 与 OpenCV 版本不兼容一站式解决

最近在 Windows 环境安装《动手学深度学习》配套库 d2l,先后尝试教材配套稳定版d2l0.17.6和新版d2l1.0.3,踩了大量 Windows 平台独有的坑:离线高版本 whl 依赖连锁冲突、pandas 源码编译 ssize_t 未定义、VC 编译工具失效、numpy 与 opencv 版…

2026/7/30 17:53:35 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻