(五)STM32F407 cubemx IIC驱动OLED(1)IIC协议篇
这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。
废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统硬件IIC配置都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。这篇文章大致的简述一下IIC协议,对IIC协议有一定的认识。
1)I2C 简介
I2C(内部集成电路)总线接口用作微控制器和 I2C 串行总线之间的接口。它提供多主模式功能,可以控制所有 I2C 总线特定的序列、协议、仲裁和时序。它支持标准和快速模式。它还 与 SMBus 2.0 兼容。根据器件的不同,可利用 DMA 功能来减轻 CPU 的工作量。
2)I2C 主要特性
1.I2C 主模式特性:— 时钟生成 — 起始位和停止位生成
2.I2C 从模式特性:— 可编程 I2C 地址检测 — 双寻址模式,可对 2 个从地址应答 — 停止位检测
3.7 位/10 位寻址以及广播呼叫的生成和检测
4.支持不同的通信速度:— 标准速度(高达 100 kHz) — 快速速度(高达 400 kHz)
3)I2C模式选择
从发送器 、从接收器 、主发送器 、主接收器。
接下来就要介绍从接收端OLED,主发送端STM32。
主发送端
在主模式下,I2C 接口会启动数据传输并生成时钟信号。串行数据传输始终是在出现起始位时开始,在出现停止位时结束。起始位和停止位均在主模式下由软件生成(也就是STM32编写)。 在从模式下,该接口能够识别其自身地址(7 或 10 位)以及广播呼叫地址。数据和地址均以 8 位字节传输,MSB 在前。起始位后紧随地址字节(7 位地址占据一个字节; 10 位地址占据两个字节,注意这)。地址始终在主模式下传送。 在字节传输 8 个时钟周期后是第 9 个时钟脉冲,在此期间接收器必须向发送器发送一个应答位。请参见图。
到这就需要明白两个概念:十位数据或者七位数据数据格式不同
首先不同之处在于:在10 位寻址模式下,比较对象还包括头序列(11110xx0),其中,xx 表示该地址的两个最高有效位。头或地址不匹配:接口会忽略它并等待下一个起始位。头匹配(仅针对 10 位模式):如果 ACK 位置 1,则接口会生成一个应答脉冲并等待 8 位从地址。
从接受端
数据格式七位构成:起始位、从发送地址位、应答位、数据、应答位、停止位。
数据格式十位长度:起始位、地址头序列、从发送地址位长度为2个字节、地址头序列、应答位、数据、应答位、停止位
主发送端
1. EV5、EV6、EV9、EV8_1 和 EV8_2 事件可延长 SCL 低电平时间,直到相应的软件序列结束为止。
2. 如果软件序列在下一个字节传输结束之前未能完成,EV8 事件会延长 SCL 低电平时间。
至此对OLED部分的IIC有了一定的了解,下一步开始了解硬件OLED。