打印
[应用相关]

STM32的I2C通讯过程

[复制链接]
443|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
[backcolor=rgba(255, 255, 255, 0.9)]使用I2C外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1 及SR2)”的不同数据位写入参数,通过读取这些寄存器标志来了解通讯状态。
[backcolor=rgba(255, 255, 255, 0.9)]1.主发送器
[backcolor=rgba(255, 255, 255, 0.9)]
[backcolor=rgba(255, 255, 255, 0.9)]                        可使用STM32标准库函数来直接检测这些事件的复合标志,降低编程难度。



使用特权

评论回复
沙发
过期的塔头|  楼主 | 2021-11-30 19:43 | 只看该作者
控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对 SR1寄存器的“SB”位置1,表示起始信号已经发送;

使用特权

评论回复
板凳
过期的塔头|  楼主 | 2021-11-30 19:47 | 只看该作者
发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及 “EV8”,这时SR1寄存器的“ADDR”位及“TXE”位被置1,ADDR 为1 表示地址已经发送,TXE为1表示数据寄存器为空;

使用特权

评论回复
地板
过期的塔头|  楼主 | 2021-11-30 19:48 | 只看该作者
往I2C的“数据寄存器DR”写入要发送的数据,这时TXE位会被重置0,表示数据寄存器非空,I2C外设通过SDA信号线一位位把数据发送出去后,又会产生“EV8”事件,即TXE位被置1,重复这个过程,可以发送多个字节数据;

使用特权

评论回复
5
过期的塔头|  楼主 | 2021-11-30 19:51 | 只看该作者
发送数据完成后,控制I2C设备产生一个停止信号(P),这个时候会产生EV2 事件,SR1的TXE位及BTF位都被置1,表示通讯结束

使用特权

评论回复
6
过期的塔头|  楼主 | 2021-11-30 19:54 | 只看该作者
2.主接收器

使用特权

评论回复
7
过期的塔头|  楼主 | 2021-11-30 19:54 | 只看该作者
• 起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件 “EV5”,并会对SR1寄存器的“SB”位置1,表示起始信号已经发送;

使用特权

评论回复
8
过期的塔头|  楼主 | 2021-11-30 19:55 | 只看该作者
发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”这时SR1寄存器的“ADDR”位被置1,表示地址已经发送。

使用特权

评论回复
9
过期的塔头|  楼主 | 2021-11-30 19:56 | 只看该作者
从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生“EV7”事件,SR1寄存器的RXNE被置1,表示接收数据寄存器非空,读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时可以控制I2C发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收数据,若非应答,则停止传输;

使用特权

评论回复
10
过期的塔头|  楼主 | 2021-11-30 20:05 | 只看该作者
   • 发送非应答信号后,产生停止信号(P),结束传输。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

923

帖子

0

粉丝