STM32学习记录-09-2-I2C通信(硬件)

1 I2C外设

STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担

支持多主机模型

支持7位/10位地址模式(10位地址寻址时读取前两个字节7+8=15,但第一个字节的前五位必须是11110作为标志)

支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz)

支持DMA

兼容SMBus协议(系统管理总线)

STM32F103C8T6 硬件I2C资源:I2C1、I2C2

2 I2C框图

左边为外设通信引脚SDA和SCL,SMBALERT是SMBus用的,通信引脚一般是借用GPIO口的复用模式与外部世界相连。上面的SDA是数据控制部分,核心部分是数据寄存器和数据移位寄存器,要发送数据时可以把一个字节数据写到数据寄存器DR,然后转到移位寄存器里,一旦前一个数据移位完成下个数据就可以继续发送,当数据由数据寄存器转到移位寄存器就会将状态寄存器的TXE置1表示发生寄存器为空。

输入数据时数据从引脚移入到移位寄存器,当一个字节数据收齐后,数据就整体从移位寄存器转到数据寄存器,同时标志位RXNE置1表示接收寄存器非空,就可用读寄存器了。

比较器和地址寄存器是从机模式使用的,我们可以自己设定自身地址寄存器,使STM32作为从机响应外部主机。数据校验模块,当发送多字节的数据帧时硬件可以自动执行CRC校验计算,可以根据前面的数据进行数据运算,得到一个字节校验位附加在数据帧后面,接收到这帧数据后硬件也可以自动执行校验判定。

SCL中,时钟控制用来控制SCL线,在时钟控制寄存器写对应位电路就会执行对应功能,写入控制寄存器就可以对整个电路进行控制,状态寄存器可以读取电路状态,中断当内部有标志位置1后可以申请中断,DMA请求与响应在多字节时候可配合使用。

3 I2C基本结构

移位寄存器和数据寄存器DR的配合是通信核心部分(高位先行),一个SCL时钟移位一次,接收时数据从GPIO口依次进来移位8次接收完成,两个GPIO口都要配置成复用开漏输出模式。SDA部分输出数据通过GPIO口输出到端口,输入数据也通过GPIO到移位寄存器。开关控制是I2C_Cmd使能外设。

4 主机发送

10位地址帧头=5位地址标志位11110+2位地址+1位读写位

7位地址:起始+从机地址+应答+数据1+应答+数据2+应答+…+停止

初始化后总线默认空闲状态,STM32默认从模式,产生起始条件要写入控制寄存器CR1,之后STM32由从模式转为主模式,起始条件后会发生EV5事件(SB=1,SB是状态寄存器的一个位,表示硬件状态,在SR1中,代表起始条件已发送),然后可以发送从机地址写到数据寄存器DR中,之后硬件电路就会

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值