目录
前言
一、关于I2C
二、正文
1.引脚的配置
2.I2C的起始和终止时序
3.发送一个字节
4.接收一个字节
5.应答信号
6.指定地址写和指定地址读
总结
前言
环境:
芯片:STM32F103C8T6
Keil:V5.24.2.0
本文主要参考江科大教程,如有不明白地方,可在B站搜索江科大,有视频讲解教程。
一、关于I2C
网上挺多的资料,大家自己搜索下(惯例水一下)
这里需要说一下,SCL:时钟线,也有叫SCK的
SDA:数据线。顾名思义,数据都是在这条线上传输的
二、正文
1.引脚的配置
注意:SCL和SDA一定要配置成开漏输出模式。因为从机会拉低电平进行应答或数据传输,如果此时有强上拉,将会形成短路,造成元件损坏。所有I2C均是如此。切记。
所以第三条会有上拉电阻,形成弱上拉。此时放开IO输出,IO电平会随着弱上拉变成高电平
所以可以输出高低电平,但是没有驱动能力。
2.I2C的起始和终止时序
如图:无需多言。
3.发送一个字节
时序:
1。在SCL低电平期间,将数据放在SDA上,1为高电平,0为低电平。
2.当SCL为高电平时读取此时的SDA电平,判断数据是0或1.
3.然后SCL拉低电平。
4.SDA放入数据。重复步骤1-3.实现多字节写入
备注:
1.实际在SCL上升沿时,数据就已经读取完毕。
2.在SCL高电平时,SDA不可以改变状态。
4.接收一个字节
和发送一个字节类似,不过它是由从机发送,主机接收
时序:
1.主机拉低SCL
2.从机在SCL低电平期间,将数据放入SDA,1为高电平,0为低电平
3.主机在SCL高电平期间读取SDA的数据.
4.主机拉低SCL
5.从机放入数据在SDA,循环1-5可以读取多个字节的数据
注意:
和写不一样的地方:SCL依旧由注意控制,但是主机拉低SDA后需要要释放掉SDA,进入输入模式.此时从机可以操控SDA电平.
5.应答信号
如图:无需多言.
注意:当用示波器抓取从机的应答信号时,理论上,当SDA被主机释放时会变成高电平,然后由从机拉低.但是可能无法抓取到SDA的高电平.原因是:从机在感应到SDA电平变化的时候接手,又把电平拉低了,造成SDA还未达到高电平就被从机拉低.时间太短示波器无法抓取.
6.指定地址写和指定地址读
1.指定设备
2.指定设备中的寄存器地址
3.写入数据(读取的话一样的顺序)
注意:I2C设备读取的地址为上次操作的地址,操作完后会自动+ 1;如果数据是连续的,就可以连续读取.如果是不连续的就需要每次指定地址才可以.
总结
I2C的时序基本一致,会一个就可以会全部.希望大家技术越来越牛
关关难过关关过,前路漫漫亦灿灿.
共勉.