50元从零到成品:一套AI辅助的嵌入式实战入门教程——IIC篇

说到IIC,第一次接触应该是在蓝桥杯的备赛时调试的AT24C02存储功能。那时候并不是很懂这个协议到底是什么意思为什么这么设计,看着手册上密密麻麻的时序图,什么起始条件、停止条件、应答位、非应答位......头都大了。一通乱调后写入的数据根本没有实现保存。于是为了确保AT24C02能正常保存数据,我开始背代码------把能用的驱动文件完整地背下来,连每个延时都不敢改。现在想想真是好笑。

后来我才明白,IIC其实没那么复杂,它本质上就是一套"你说我听、我问你答"的规矩。这篇咱们就来聊聊IIC是什么、它怎么工作,为后续点亮OLED屏打下理论基础。

省流版:

  • ✅ IIC是什么?一个生活化的比喻帮你秒懂

  • ✅ IIC的物理层:就两根线,能挂一堆设备

  • ✅ IIC的协议层:起始、停止、应答、数据------就这么几个动作

  • ✅ STM32的硬件IIC怎么配置

  • ✅ 实验目标:用硬件IIC点亮OLED屏

一、为什么学IIC?

在之前的篇章里,我们已经接触过GPIO点灯、按键中断、定时器PWM、ADC采集------这些都是在跟单片机自己 或者单个传感器 打交道。但从这一篇开始,我们要正式进入设备与设备之间通信的世界了。

本系列的目标是用STM32F103C8T6核心板做一个室内环境检测系统 。系统里需要显示数据,所以我们需要一个显示屏。在各种显示屏里,OLED屏 是个绝佳的选择------功耗低、对比度高、体积小,而且用IIC接口的话,只需要两根信号线就能驱动。

这就引出了我们今天的主角------IIC总线。

二、IIC是什么?一个生活化的比喻

先别急着看寄存器,咱们用一个生活中最常见的场景来理解IIC。

想象一下开家长会的场景:

教室里有一个老师 (主机 ,Master)和一群家长 (从机 ,Slave)。老师站在讲台上,手里拿着话筒 (SCL时钟线 ),还有一根数据线 (SDA数据线)。

老师想跟某位家长交流,会先喊一声:"各位注意,我要开始说话了 "(起始条件,Start Condition)。然后所有家长都安静下来,看向老师。

老师接着说:"张三的家长在吗? "(发送从机地址 ,Slave Address)。张三妈妈举手:"在! "(应答位,ACK)。其他家长听到不是喊自己,就不吭声了。

然后老师和张三妈妈开始一对一交流------老师说一句,张三妈妈回一句,每句话说完对方都要"嗯"一声表示听到了(应答机制 )。交流完了,老师说:"好了,散会 "(停止条件,Stop Condition),其他家长又可以自由活动了。

IIC总线的工作原理,本质上就是这样------一套"一问一答、有始有终"的通信规矩。

三、IIC的物理层:就两根线

IIC总线在物理上非常简单,只需要两根信号线:

  • SCL(Serial Clock Line,串行时钟线)

    :由主机产生的时钟信号,决定了数据传输的节奏。就像家长会里老师手里的话筒------谁拿话筒谁说话,节奏由老师掌控。

  • SDA(Serial Data Line,串行数据线)

    :传输实际数据的那根线。就像老师说话的内容、家长回答的内容都通过这根线传递。

这两根线都需要接上拉电阻 到电源------因为IIC的引脚都是开漏输出模式,只能输出低电平,高电平要靠上拉电阻来拉高。

IIC总线最大的优势是:一根总线上可以挂载多个设备 ,最多能挂 127个 从设备(7位地址的情况下)。所有设备都并联在同一对SCL和SDA上,通过设备地址来区分谁跟谁通信。

四、IIC的协议层:就这几个动作

IIC的通信协议其实就几个基本动作,掌握了这几个,IIC你就懂了一大半。

4.1 起始条件(Start Condition)

主机想开始一次通信时,会在SCL为高电平的时候,把SDA从高电平拉低到低电平。

这就像老师拿起话筒说"各位注意"------告诉所有从机:我要开始说话了。

4.2 停止条件(Stop Condition)

主机想结束通信时,会在SCL为高电平的时候,把SDA从低电平拉高到高电平。

这就像老师说"散会"------告诉所有从机:通信结束了。

4.3 数据位传输

在SCL为高电平的时候,SDA上的数据必须保持稳定------高电平就是1,低电平就是0。数据只能在SCL为低电平的时候发生变化。

这就像老师说话时,每个字必须吐字清晰;换字的时候可以换口气(SCL低电平的时候换数据)。

4.4 应答位(ACK)与非应答位(NACK)

每传输完8位数据(一个字节),接收方需要在第9个时钟周期内把SDA拉低,表示"收到了"(ACK)。如果接收方把SDA保持高电平,就表示"没收到"或"不想收了"(NACK)。

这就像每说完一句话,对方都要"嗯"一声表示听到了。如果对方不吭声,就知道出问题了。

4.5 完整的通信流程

一次完整的IIC通信是这样的:

  1. 主机发送起始条件(START)

  2. 主机发送从机地址(7位)+ 读写位(1位)

    ------ 7位地址加1位读写标志,一共8位

  3. 从机发送应答位(ACK)

    ------ 表示"我在,找我什么事?"

  4. 主机发送数据(8位)

    ------ 可以是命令,也可以是数据

  5. 从机发送应答位(ACK)

    ------ 表示"收到了"

  6. 重复第4、5步

    ------ 可以连续发送多个字节

  7. 主机发送停止条件(STOP)

注意 :上面描述的是主机写从机 的流程。如果是主机读从机,流程稍有不同------主机发送完地址和读标志后,就由从机来发送数据,主机来应答。

五、STM32的IIC外设

STM32F103内部集成了硬件IIC外设 ,支持标准模式(100kHz) 和快速模式(400kHz) 。

使用硬件IIC的好处是:

  • 不需要手动翻转SCL和SDA

    ------硬件自动完成时序控制

  • 不需要软件模拟时序

    ------不用操心起始条件、停止条件这些细节

  • CPU占用低

    ------数据传输由硬件完成,CPU可以去做别的事

当然,STM32的硬件IIC早年有些争议------据说F1系列的硬件IIC有一些bug,所以很多老工程师习惯用软件模拟IIC 。但实际上,只要你配置正确,硬件IIC完全可以用。这次我们就用硬件IIC来驱动OLED屏。

六、本次实验目标

理论讲完了,接下来进入实战环节------用STM32的硬件IIC点亮OLED屏,显示字母汉字数字 。

硬件准备:

  • Jlink OB

  • STM32F103C8T6核心板 × 1

  • 0.96寸OLED屏(IIC接口) × 1

  • 杜邦线 × 4(VCC、GND、SCL、SDA)

实验步骤(代码部分交给你自己来写):

  1. 硬件连接:把OLED的VCC接到3.3V、GND接GND、SCL接STM32的SCL引脚(PB6)、SDA接SDA引脚(PB7)

  2. CubeMX配置:打开IIC外设,选择合适的模式(I2C),配置速度为100kHz

  3. 生成代码:让CubeMX生成初始化代码

  4. 编写驱动:这次我们直接把厂家例程和自己的工程都交给ai,告诉他要根据例程代码实现OLED的初始化、写命令、写数据、清屏、显示字符串等函数

    一般参考程序都会使用软件模拟iic确保兼容性,而实际使用的话有硬件iic最好用硬件iic从性能和稳定性上都好于模拟iic。可以看到我提问有专门告诉ai要用我们cubemx生成的iic驱动。

  5. 下载验证:编译下载,看OLED屏上是否正常显示

资源包

复制代码
通过网盘分享的文件:OLED显示.rar
​​​​​​​链接: https://pan.baidu.com/s/13lAImi3z9l4FVIJWV3z-xA 提取码: wv9h --来自百度网盘超级会员v4的分享

七、总结

本次不仅仅是教大家如何通过iic驱动OLED,而且还是告诉大家如何从买到的模块资料中借力让AI能更好的准确的实现功能。如果没有例程可能AI调试显示屏会慢很多,因为涉及不同的驱动芯片的协议问题、字符集问题等。

动手实践才是最好的学习方式。遇到问题别慌------IIC的时序就那么几个动作,对照着协议一步一步排查,一定能调通。

相关推荐
Yolanda_20221 小时前
如何开发人工智能系统:从专家系统到机器学习
人工智能·机器学习
小天源1 小时前
品牌 AI 智能监测与自动化采集系统
大数据·人工智能·自动化
Navicat中国1 小时前
Navicat 18 支持 Azure OpenAI 接入,合规 AI 赋能 SQL 开发
数据库·人工智能·microsoft·ai·azure·navicat·数据
陈嘿萌1 小时前
CVPR 2026|TherA:让可见光照片“懂冷热”,用文字和参考图控制红外生成
图像处理·人工智能·深度学习·计算机视觉·学术研究与理论基础
shxjnpl1 小时前
MOSS-Transcribe-Diarize 0.9B 私有化部署实战:一个模型完成会议转写、说话人识别与时间戳
人工智能·语音识别·实时音视频
武汉唯众智创1 小时前
心理健康中心 / 咨询室 / 宣泄室怎么建?从空间规划到 AI 系统的一体化方案
人工智能·ai心理健康·ai心理健康测评·心理健康中心建设·心理健康咨询室解决方案
SL_staff1 小时前
APS落地失败的5个隐形坑:离散制造排产为何总在Excel里打转?
java·人工智能·开源
Yolanda_20221 小时前
神经网络基础原理-使用梯度下降训练二次函数模型简单示例
人工智能·深度学习·神经网络
倔强的石头1061 小时前
持续预训练实战_让基础模型适配垂直领域
人工智能·深度学习