十、STM32-------------IIC通信

一、IIC通信简介

1、IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器以及其外围设备。它是由数据线 SDA 和时钟线 SCL 构成的串行总线,可发送和接收数据。

2、IIC总线的特点

2.1、总线由数据线 SDA 和时钟线 SCL 构成的串行总线,数据线用来传输数据,时钟线用来
同步数据收发。
2.2、总线上每一个器件都有一个唯一的地址识别,所以我们只需要知道器件的地址,根据时
序就可以实现微控制器与器件之间的通信。
2.3、数据线 SDA 和时钟线 SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电
压,所以当总线空闲的时候,这两条线路都是高电平。
2.4、总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速
模式下可达 3.4Mbit/s
2.5、总线支持设备连接。在使用 IIC 通信总线时,可以有多个具备 IIC 通信能力的设备挂载
在上面,同时支持多个主机和多个从机,连接到总线的接口数量只由总线电容 400pF 的限制决
定。

二、IIC时序

2.1、起始信号
        当SCL为高电平期间,SDA出现由高到低的跳变沿时,即为起始信号。该信号只能由主机发出。
2.2、停止信号
        当SCL为高电平期间,SDA出现由低到高的跳变沿时。即为结束信号。该信号只能由主机发出。
2.3、应答信号
        发送方每发送一个字节之后,就会在第9个时钟脉冲期间释放总线,由接收器反馈一个应答信号。并且应答信号为低电平时,规定为有效应答位(ACK),表示接收器已经成功接收。应答信号为高电平时,规定为非应答位(NACK),表示字节接收失败。
2.4、数据的有效性
        IIC总线进行数据传送时,时钟信号为高电平期间,从机(主机)将在SCL高电平期间读取数据位,所以数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
2.5、数据传输  
         在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在 SCL 串行 时钟的配合下,在 SDA 上逐位地串行传送每一位数据。数据位的传输是边沿触发。
2.6、数据传输
        当SDA和SCL两条信号线同时处于高电平时,规定为IIC总线的空闲状态。两条信号线由各自的上拉电阻拉高。
总结一下:
        IIC通信:
         1、 起始信号  ;
                SCL高电平期间,SDA出现一个向下的跳变沿。
         2、从机地址+读写位;
              从机地址位一般为7位,然后加一位读写位,组成一个字节,0表示写数据,1表示读数据。
         3、应答位;
               当发送方发送完从机地址+读写位或者一个字节数据之后,发送方会释放SDA线,将SDA电平拉高。接收方必须在接下来的第9个SCL时钟周期内,将SDA线主动拉低即(ACK),如果接收方没有将SDA拉低,那就是(NACK).
         4、数据;
                写操作 (Write - R/W=0)主设备发送数据字节 -> 从设备在每字节后回复 ACK/NACK
                读操作 (Read - R/W=1)从设备发送数据字节 -> 主设备在每字节后回复 ACK (表示继续发) 或 NACK(表示停止发送)。
        5、停止位;
                SCL高电平期间,SDA出现一个向上的跳变沿。
要理解上面,最重要是记住,读取数据总是在SCL高电平期间进行的,所以在SCL高电平期间,SDA必须保持稳定。如果在高电平期间,SDA出现向上或者向下的跳变沿即开始或者停止信号。
从下图中可以看出,在读取数据时,SCL在高电平,并且SDA保持在高电平或者低电平。在两端的起始信号和停止信号,SCL高电平期间,SDA出现了一个向上或者向下的跳变沿

三、IIC功能实现

3.1、原理图

        原理图:

由原理图可知,与IIC通信的外设是EEPROM存储器AT24C02。
AT24C02 是一个具有2k大小的存储器,内部由256个字节。原理图中WP引脚为ATC02的写保护引脚,高电平时只读低电平时可读可写。并且AT24C02地址有可编程的部分和不可编程的部分,可编程部分由引脚A0、A1、A2决定。
        上面我们写了IIC的写操作,读写位为0,而读操作,读写位为1。
        所以AT24C02的写地址为 0xA0,读地址为0xA1。

由24C02的地址格式图可知。高位(MSB)在前,低位在后(LSB)。其中

(前四位)1010表示:是 24C02 器件在 I²C 总线中的固定器件码,由芯片厂商定义,用于区分总线上其他类型的 I²C 设备。

A2、A1、A0表示:器件地址位,与芯片的 A₂、A₁、A₀ 引脚电平状态对应。原理图中24C02的三个引脚全部接地。即如果向其写数据的时候,为0XA0(1010  0000),中间标红的三个0表示低电平。

R/W表示:读写位,0表示写数据,1表示读数据。

7位地址位+1位读写位组成一个1个字节数据。

3.2、Cubemx配置

        

3.3、keil代码编写。

        iic.h
        

        iic.c
        

gpio.c

用按键0向24C02中写数据,用按键1读数据。

3.4、功能实现

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值