单片机_day6_IIC+SHT20

目录

1. I2C基础简介

1.1 为什么I2C需要使用上拉电阻?

2. I2C特点

3. 时序图分析

3.1 起始信号与终止信号

3.2 数据传输时序

3.3 字节传输和应答信号

3.4 I2C寻址

3.4.1 主机给从机发送一个字节

3.4.2 主机给从机发送多个字节

3.4.3 主机从从机接收一个字节

3.4.4 主机从从机接收多个字节

4. I2C寄存器

4.1 I2C_RXDR(I2C 接收数据寄存器)

4.2 I2C_TXDR(I2C 发送数据寄存器)

5. 温度传感器实验

5.1 模块简介

5.2 SHT20通讯原理

5.2.1 起始和终止时序

5.2.2 通信时序

5.2.2.1 IIC地址

5.2.2.2  I2C相关命令

5.2.2.4 no hold master通信时序

5.3 SHT20信号转换

5.3.1 湿度转换

5.3.2 温度转换

6. 硬件IIC实验-SHT20读取实验

6.1 引脚定位

6.2 cubeMX配置

6.2 驱动代码移植

6.4 重定向相关

​​​​​​​6.5 程序编写

6.6 效果


1. I2C基础简介

     IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。不同的器件,都是并联接在这两条线上,I2C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的

SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的

1.1 为什么I2C需要使用上拉电阻?

答:总线空闲的时候,SDA和SCL都是高电平。当其中一个设备拉低总线,整条线就全是低电平,器件与器件之间变为"与"关系。

为了避免总线信号收到从设备的干扰,各设备连接到总线的输出端时必须是漏极开路(OD)输出,即高阻态,无法主动输出高电平,需要外部上拉电阻才可以获得高电平。

2. I2C特点

    通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(控制SCL的电平高低变换)谁就是主设备。

  • IIC主设备功能:主要产生时钟,产生起始信号和停止信号
  • IIC从设备功能:可编程的IIC地址检测,停止位检测
  • IIC的一个优点是它支持多主控(multimastering),其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
  • 支持不同速率的通讯速度,标准速度(最高速度100kHZ), 快速(最高400kHZ),比uart高,比spi低
  • SCL和SDA都需要接上拉电阻 (大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
  • IIC是半双工,而不是全双工 ,同一时间只可以单向通信,IIC协议首先是发送从机硬件地址,然后发送命令,再发送数据/寄存器编号或者读取数据。IIC协议可以多字节连续读写数据。
  • 各设备连接到总线的输出端时必须是漏极开路(OD)输出或集电极开路(OC)输出

3. 时序图分析

3.1 起始信号与终止信号

  1. SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;
  2. SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号;
  3. 起始和终止信号都是由主机发出,起始信号产生后,总线就处于占用的态;
  4. 终止信号产生后,总线就处于空闲态。

3.2 数据传输时序

  1. I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定; 只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
  2. 在时钟为低电平期间,发送器向数据线上写入数据,因此数据线上的数据运行变化; 在时钟为高电平期间,接收器从数据线上读取数据,因此必须保持数据线上的数据稳定。
  3. 最终完成一个时钟周期内,发送器发生一个bit位数据,接收器接收一个bit位数据。

3.3 字节传输和应答信号

  1. 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
  2. 在第9个时钟周期的低电平期间,接收器向数据线上写入数据。
  3. 在第9个时钟周期的高电平期间,发送器从数据线上读取数据。
  4. 如果读到的是低电平信号,表示应答信号。
  5. 如果读到的是高电平信号,表示非应答信号。

3.4 I2C寻址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值