I2C—读写EEPROM学习笔记之STM32的I2C通讯过程
STM32的I2C通讯过程
使用I2C外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1及SR2)”的不同数据位写入参数,通过读取这些寄存器标志来了解通讯状态。
1.主发送器
SB:start bit 起始位发送成功
ADDR:收到A
TxE:数据寄存器为空
BTF:移位寄存器为空
• 控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的“SB”位置1,表示起始信号已经发送;
• 发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8”,这时SR1寄存器的“ADDR”位及“TXE”位被置1, ADDR 为1表示地址已经发送, TXE为1表示数据寄存器为空;
• 往I2C的“数据寄存器DR”写入要发送的数据,这时TXE位会被重置0,表示数据寄存器非空, I2C外设通过SDA信号线一位位把数据发送出去后,又会产生“EV8”事件,即TXE位被置1,重复这个过程,可以发送多个字节数据;
• 发送数据完成后,控制I2C设备产生一个停止信号( P ),这个时候会产生EV2事件,SR1的TXE位及BTF位都被置1,表示通讯结束。
2.主接收器
RxNE:数据寄存器非空(接收时)
EV7_1:读取RxNE=1,设置ACK=0,
• 起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对SR1寄存器的“SB”位置1,表示起始信号已经发送;
• 发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”这时SR1寄存器的“ADDR”位被置1,表示地址已经发送。
• 从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生“EV7”事件, SR1寄存器的RXNE被置1,表示接收数据寄存器非空,读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时可以控制I2C发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收数据,若非应答,则停止传输;
• 发送非应答信号后,产生停止信号( P ),结束传输。
清除标志位操作过于复杂,可使用STM32标准库函数来直接检测这些事件的复合标志,降低编程难度。
- I2C—读写EEPROM学习笔记之STM32的I2C库函数
- I2C—读写EEPROM学习笔记之EEPROM简介
- I2C—读写EEPROM学习笔记之软件模拟IIC原理
- I2C—读写EEPROM学习笔记之代码详解-bytewrite/ramdomread
- I2C—读写EEPROM学习笔记之代码详解-初始化I2C
- STM32HAL库学习笔记--硬件I2C读写AT24C512
- I2C—读写EEPROM学习笔记代码详解读写EEPROM完整工程
- 基于STM32的USB枚举过程学习笔记(三)
- STM32之I2C_EEPROM读写
- 基于STM32的USB枚举过程学习笔记(四)
- STM32作为主机I2C,读写24C02 EEPROM
- RT-thread学习笔记1 I2C设备驱动学习之EEPROM驱动(上)
- I2C总线学习(四)--读写过程
- R6 STM32 I2C—读写EEPROM
- STM32学习笔记:读写内部Flash。
- 基于STM32的USB枚举过程学习笔记(五)
- 基于STM32的USB枚举过程学习笔记
- STM32学习笔记之硬件SPI读写与极性设置
- cortex_m3_stm32嵌入式学习笔记(二十):IIC实验(I2C串行总线)
- hadoop学习笔记--hadoop读写文件过程