I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* TRA, BUSY, MSL, TXE and BTF flags */ { //防止超时 count++; if(count == I2CTimeOut) { return -4; //没有产生EV8事件,导致超时返回 -4 } } DataToWrite++; } //6.发送停止信号 I2C_GenerateSTOP(I2C1,ENABLE); return 0; }...
Timeout,tickstart)!=HAL_OK){if(hi2c->ErrorCode==HAL_I2C_ERROR_AF){/* Generate Stop */hi2c->Instance->CR1|=I2C_CR1_STOP;returnHAL_ERROR;}else{returnHAL_TIMEOUT;}}/* Write data to DR */hi2c->Instance->
可以通过将寄存器I2C_CR1的ANFOFF位置1,来关闭模拟噪声滤波器。注意该位只能在I2C禁止时(PE=0)时编程。 数字噪声滤波器,从框图可以看出它是SDA和SCL经过模拟噪声滤波器再进来的,通过配置 I2C_CR1 寄存器中的 DNF[3:0] 位来使能数字滤波器使能数字滤波器,数字滤波器可滤除脉宽 DNF[3:0] *tI2CCLKtI2CCLK以下...
控制寄存器(CR1&CR2)用于配置I2C的工作模式,状态寄存器(SR1&SR2)记录工作状态,控制逻辑电路则像一个总指挥,整合各部分信号,处理中断和DMA请求与响应,协调I2C的整体运行。接下来看看硬件I2C的7位主发送流程,这是实际应用中的关键环节。通信开始时,主设备在SCL为高电平时,将SDA从高电平拉至低电平,产生起始信号,触发...
1)配置I2C_CR2寄存器,以生成正确的计时 2)配置时钟控制寄存器 3)配置上升时间寄存器 4)配置I2C_CR1寄存器使能该外设 5)设置I2C_CR1寄存器的起始位,以生成一个起始条件 外围输入时钟: 在sm mode下,至少2MHZ 在Fm mode下,至少4MHZ SCL主时钟生成 CCR位用于生成SCL时钟的高电平和低电平,分别从上升沿和下降沿的生...
整体控制逻辑负责协调整个I2C外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变。在外设工作时, 控制逻辑会根据外设的工作状态修改“状态寄存器(SR1和SR2)”,我们只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态。 除此之外,控制逻辑还根据要求,负责控制产生I2C中断信号、DMA请求及各...
I2C寄存器部分: 控制寄存器 1(I2C_CR1) 控制寄存器 2(I2C_CR2) 自身地址寄存器 1(I2C_OAR1) 自身地址寄存器 2(I2C_OAR2) 数据寄存器(I2C_DR) 状态寄存器 1(I2C_SR1) 状态寄存器 2 (I2C_SR2) 时钟控制寄存器(I2C_CCR) TRISE寄存器(I2C_TRISE)
整体控制逻辑负责协调整个I2C外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR1和SR2)”,我们只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态。除此之外,控制逻辑还根据要求,负责控制产生I2C中断信号、DMA请求及各种...
本部分可参考STM32中文参考手册24.6.1 控制寄存器 1(I2C_CR1)和24.6.2 控制寄存器 2(I2C_CR2)以及24.6.6 状态寄存器 1(I2C_SR1)和24.6.7 状态寄存器 2 (I2C_SR2)。 整体控制逻辑负责协调整个I2C外设,控制逻辑的工作模式根据我们配置的控制寄存器(CR1/CR2)的参数而改变。在外设工作时,控制逻辑会根据外设的工作...
控制逻辑:有两个控制寄存器(Control Register 1,CR1)和(Control Register 2,CR2)用于控制逻辑。通过它们可以触发起始和停止信号,做出ACK响应,配置外设时钟频率,开启DMA和中断的功能。同时控制逻辑的状态会反馈到(Status Register 1,SR1)和(Status Register 2,SR2)两个状态寄存器上,根据它们可以知道当前总线是否被占用,...