STM32-IIC通信

IIC:由数据线 SDA 和时钟线 SCL 构成的串行总线,可发送和接收数据,在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送。
特点:
1.IIC总线是由数据线SDA和SCL时钟线,数据线用来进行数据传输,时钟线用来同步数据发送;
2.总线上每一个设备都有一个唯一地址;
3.空闲时,数据线SDA和SCL时钟线永远是高电平;
4.数据传输速率:
①.标准模式下:100Kbits/s,
②.快速模式下:400Kbits/s,
③.高速模式下:3.4Mbit/s
5.数据传输格式:
①.起始信号:当时钟线SCL为高电平时,数据线SDA由高电平转为低电平,起始信号之后,总线处于占用状态(SCL为低电平)。该信号是由主机发送。
void IIC_Start(void)
{
SDA_OUT(); //设置数据线SDA为输出
IIC_SDA=1; //数据线SDA为高电平
IIC_SCL=1; //时钟线SCL为高电平
delay_us(4); //延时等待电平信号稳定
IIC_SDA=0; //数据线SDA为低电平
delay_us(4); //延时等待电平信号稳定
IIC_SCL=0; //设置时钟线SCL为低电平,总线处 于占用状态
}
②.结束信号:当时钟线SCL为高电平时,数据线SDA由低电平转为高电平,结束信号之后,总线处于空闲状态(SCL为高电平)。该信号是由主机发送。
void IIC_Stop(void)
{
SDA_OUT(); //设置数据线SDA为输出
IIC_SCL=0; //时钟线SCL为低电平
IIC_SDA=0; //数据线SDA为高电平
delay_us(4); //延时等待电平信号稳定
IIC_SCL=1; //时钟线SCL
IIC_SDA=1;
delay_us(4);
}
③.应答信号:发送器每发送一个字节,就在时钟脉冲第 9 期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位;应答信号为高电平时,规定无效应答信号。
a) 生成应答信号函数
void iic_ack(void)
{
IIC_SDA(0); //应答信号
iic_delay();
IIC_SCL(1);
iic_delay();
IIC_SCL(0);
iic_delay();
IIC_SDA(1);
iic_delay();
}
b) 生成无效应答信号函数
void iic_nack(void)
{
IIC_SDA(1); //无效应答信号
iic_delay();
IIC_SCL(1); /* 产生一个时钟 */
iic_delay();
IIC_SCL(0);
iic_delay();
}
④.数据有效性
在时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。数据在 SCL 的上升沿到来之前就需准备好。并在下降沿到来之前必须稳定。
⑤.数据传输
在 I2C 总线上传送的每一位数据都有一个时钟脉冲相对(或同步控制),即在 SCL 串行时钟的配合下,在 SDA 上逐位地串行传送每一位数据。数据位的传输是边沿触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值