【STM32】IIC通信

  • IIC总线介绍:

IIC是philips公司开发的一种通用数据总线,

2根通信线:SCL和SDA,

同步,半双工,

带数据应答,

支持总线挂载多设备,一主多从、多主多从,

电路需要所有IIC设备的SCL连在一起,SDA连在一起,

设备的SCL和SDA均配置成开漏输出,防止短路,开漏输出高电平时即为浮空状态可以输入数据,

SCL和SDA各加一个上拉电阻,阻值4.7kΩ左右,弱上拉不影响数据传输。

  • IIC优点:

半双工 一根线收发数据没有资源浪费;

同步时序 对时间要求不严格较少依赖硬件,没有IIC外设也可以软件模拟;

收发数据有应答机制;

可以多个设备挂载,最多127个,不管挂载多少设备,通信线也只需要两根。

缺点是实现IIC通信的要求比较多,要指定设备寻址,要有应答,由于弱上拉导致上升沿变化速度慢拖慢整个通信速度,尽管改进电路后有3.4M的高速模式但还是比SPI慢了很多。

  • IIC时序:

起始时 SDA先拉低 SCL后拉低,终止时 SCL先拉高 SDA后拉高,

可以简单理解为 SDA早出晚归,SCL迟到早退;

一次收/发一个字节也就是8个位,数据高位先行,SCL低电平时,主/从机将数据放到SDA上,SCL高电平时SDA保持不动,从/主机读取SDA电平,循环8次一个字节传输完毕,

可以简单理解为 SCL说123木头人时SDA随意动,SCL说不许动SDA就保持原样不能动了;

主机发送完一个字节后松开SDA,SDA回弹为高电平,从机应该拉低SDA给出应答,下一个SCL高电平读取SDA为0则表示从机应答,1为非应答,

主机接收完一个字节后应该在下一个SCL高电平之前给出应答,0为应答,1为非应答,

简单理解为 主机一直拉住SDA给从机发送数据,发完跟从机说我松手了你接着,从机立马拉住SDA说我收到消息了;反过来从机拉着SDA给主机发数据,发完数据就松手了,主机立马拉住SDA给出回应。

  • IIC实现:

IIC可以硬件实现也可以软件实现,软件实现优势是普通GPIO口就可以模拟IIC通信,硬件实现则需要接到IIC专用接口,可实现指定地址写,当前地址读和指定地址读,

指定地址写:第一个字节指定设备(最后一位是指定0读/1写的位),第二个字节指定地址,第三个字节传输数据,如果需要写多个字节就应答之后不给终止信号,写入下一个字节,地址指针会自己按顺序移动,

当前地址读:第一个字节指定设备,紧接着会在地址指针当前所指地址开始读取从机数据,

指定地址读:就是先用指定地址写的方法,调整好地址指针的位置但不写入数据,然后重新给出起始信号,继续使用当前地址读,读取从机数据即可,若要读取多个字节主机在接收到一个字节之后正常给出应答即可,若不需要继续接收则不给应答。

  • STM32的IIC外设

STM32内部集成了IIC收发电路,硬件可以自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等,

支持多主机模型,

支持7位/10位地址模式,

支持不同通讯速度,标准速度达到100khz,快速达到400khz,

支持DMA,

STM32F103C8T6硬件IIC资源有两个。

以上内容是我学习江协STM32视频课做的笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值