IIC在STM32中的使用

IIC是什么?

IIC(Inter-Integrated Circuit),意为芯片与芯片之间的通讯;IIC是一种总线通讯,为了解决多设备之间的通讯问题,通常采用一主多从模式,比如单片机为主机、屏幕、电机、测距仪等为从机;IIC是一种两线通讯,SCL(时钟线)、SDA(数据线),这种通讯方式决定了在同一时间IIC只能进行读数据或者写数据。

开始(S)和结束(P)标志
当 SCL 线为高电平时,SDA 线由高到低的下降沿,为传输开始标志(S)。
直到主设备发出结束信号(P),否则总线状态一直为忙。
结束标志(P)规定为,当 SCL 线为高电平时,SDA 线由低到高的上升沿。
在这里插入图片描述

数据格式/应答
I2C 的数据字节定义为 8-bits 长度,对每次传送的总字节数量没有限制。对每一次传输必须伴有一个应答(ACK)信号,其时钟由主设备提供,而真正的应答信号由从设备发出,在时钟为高时,通过拉低并保持 SDA 的值来实现。如果从设备忙,它可以使 SCL 保持在低电平,这会强制使主设备进入等待状态。
当从设备空闲后,并且释放时钟线,原来的数据传输才会继续。
在这里插入图片描述
通信
开始标志(S)发出后,主设备会传送一个 7 位的 Slave 地址,并且后面跟着一个第 8位,称为 Read/Write 位。R/W 位表示主设备是在接受从设备的数据还是在向其写数据。然后,主设备释放 SDA 线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一个应答位。应答产生时,从设备将 SDA 线拉低并且在 SCL 为高电平时保持低。数据传输总是以停止标志(P)结束,然后释放通信线路。然而,主设备也可以产生重复的开始信号去操作另一台从设备,而不发出结束标志。综上可知,所有的 SDA 信号变化都要在 SCL 时钟为低电平时进行,除了开始和结束标志。
在这里插入图片描述

以单片机向从设备写数据时为例,标准的写数据帧由起始位、7位从设备地址、读写位、应答信号、8位寄存器地址、8位数据、停止位构成。
在这里插入图片描述
连续写入字节
在这里插入图片描述

当单片机向从设备写数据时
发送起始信号:时钟信号为高电平期间,数据信号完成从高到低的转变(下降沿)
获取设备地址码:单片机需要获取从设备的地址才能准确的发送数据给从设备,7位地址码最多支持128台设备连接。
读写位:写数据置0,读数据置1;此时置0
应答信号:从机发送给主机应答信号,0代表收到,1代表没收到或者读取完成;
8位寄存器地址:访问从设备上的寄存器地址,即写入数据的目标地址。
应答信号:从机发送给主机应答信号,0代表收到,1代表没收到或者读取完成;
8位数据:写入8位数据
应答信号:从机发送给主机应答信号,0代表收到,1代表没收到或者读取完成,告诉主机写入成功;
停止位:时钟信号为高电平期间,数据信号完成从低到高的转变(上升沿),这一点正与起始信号相反。

代码实现

写数据

#include "stm32f10x.h"

#define I2C_Speed              400000
#define I2C1_SLAVE_ADDRESS7    0xA0

void I2C1_GPIO_Config(void)
{
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);		***使能RCC与GPIO外设***
    GPIO_InitTypeDef GPIO_InitStructure; 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			******
    GPIO_InitStructure.GPIO_Mode 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值