STM32片上资源——硬件I2C

1.I2C外设简介

(1)STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成,起始终止条件生成,应答位收发,数据收发等功能,减轻CPU的负担。(由硬件电路自动翻转引脚电平,软件只需写入控制寄存器CR和数据寄存器DR

(2)支持多主机模式:1.固定多主机:有固定的主机。

                                      2.可多变主机:没有固定的主机,任意从机可跳出来当主机。

(3)支持7位/10位地址模式。

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

(5)支持DMA(可提高效率)

(6)兼容SMBus协议

(7)STM32F103C8T6硬件I2C资源:I2C1,I2C2

硬件I2C优势:执行效率高,可以节省软件资源;功能比较强大,可以实现完整的多主机通信模式,时序波形规整,通信速率快等。

地址模式:

1.7位地址:I2C起始第一个字节的前7位为地址。

2.10位地址:I2C起始后的第一个字节的第6,7位和第二个字节8位为地址。(注:第一个字节的前五位为11110作为10位地址标志位)

2.I2C外设框图

3.I2C外设基本结构

解释:

(1)因为I2C是高位先行,所以移位寄存器向左移位,在发送的时候,最高位先移出去,然后是次高位......,一个SCL时钟移位一次,移位8次,这样能够把一个字节由高位到低位,依次放到SDA上了。接收的时候:数据通过GPIO口从右边依次移进来,最终移8次,一个字节就接收完成了。

(2)GPIO使用硬件I2C时,要配置成复用开漏输出模式(即GPIO状态交给片上外设来控制的)

(3)时钟控制器通过GPIO去控制时钟线(因为我i一主多从模式,所以只画了输出)

4.主机发送

主机发送流程:起始——从机地址+写——应答——数据应答——数据2——应答......——停止

5.主机接收

主机接收流程:起始——接收地址+写——应答——数据——应答——重新起始——接收地址+读——应答——接收数据——发送应答.........——接收数据——发送非应答——终止

6.关于主机发送和接收的补充

(1)硬件I2C时,发送应答和接收应答不需要操作,因为在发送数据I2C_SendData()和接收数据I2C_ReceiveData()时自动应答了。

(2)硬件I2C时,在起始发送数据,接收数据时会产生时间标志位,需要接收到标志位后再进行后面的操作。

(3)在STM32接收数据时,在最后一个接收数据前要提前将应答控制器ACK置0,终止条件置1。(因为ACK和STOP有滞后性,如果在接收完最后一个数据时发送ACK,STOP,ACK和STOP会在后一个数据生效)

7.I2C外设相关函数

7.1 标配函数

void I2C_DeInit()

void I2C_Init();

void I2C_StructInit();

void I2C_Cmd();

7.2 void I2C_GenerateSTART();

作用:生成起始条件。

7.3 void I2C_GenerateSTOP();

作用:生成终止条件。

7.4 void ACKKnokledgeConfig();

作用:STM32作为主机,收到一个字节后,是给从机应答,还是给非应答。

7.5 void I2C_SendData()\

作用:发送数据(写数据到DR)

7.6 void I2C_ReceiveData()

作用:接收数据(读取DR数据)

7.7 void I2C_Send7bitAddress()

作用:发送7位地址专用函数

7.8 Errorstatus I2C_CheckEvent();

作用:同时判断一个或多个标志位来确定EVN,EVN这个状态是否发生。

7.9 标志位标配函数

FlagStatus I2C_GetFlagStatus();

void I2C_ClearFlag();

ITStatus I2C_GetITStatus();

void I2C_ClearITPendingBit();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值