STM32 I2C通讯协议的硬件配置

STM32 I2C通讯协议的硬件配置

  • 功能框图
  • 寄存器
  • 1.I2C控制寄存器CR1
  • 2.I2C控制寄存器CR2
  • 3.I2C时钟控制寄存器CCR
  • 3.Trise寄存器
  • 协议控制
  • 1.起始和停止信号
  • 2.应答和非应答信号
  • 3.收发数据

  • 功能框图


    SMBALERT: SMBus模式下的报警信号,对于普通的I2C通讯,无关紧要。

    1. 数据移位寄存器和DATA register一起完成数据串行和并行的转换。
    2. 因为是高位先行,接收时,每一位先放到最低位再移位,发送时,发送每一个最高位后再移位。
    3. 时钟控制寄存器进行分频等等。
    4. 硬件电路上在控制寄存器中实现等待应答。

    寄存器

    1.I2C控制寄存器CR1


    START:置1直接产生一个起始信号。STOP同理。
    ACK:应答使能。仅仅是配置收到数据后是否产生应答,而不是产生一个应答。
    NO STRETCH: 使能时钟延长。拓展时钟的作用。
    PE:I2C模块使能。

    2.I2C控制寄存器CR2


    位[5:0]可以配置I2C模块的时钟频率。
    对于STM32F10X,位于APB1上的I2C1和I2C2最快速度就是32MHz。
    收发数据的标准模式只有100Kb/s,因此需要下方的CCR配置时钟。

    3.I2C时钟控制寄存器CCR


    只有在PE=0时才能设置。


    默认标准模式的100Kb/s。


    T_high是高电平时间,T_low是低电平时间。
    Tpclk1就是模块的时钟周期,由CR2设置的,当CR2设置成最高频率时,Tpclk1为 1/36 us,标准模式的时钟周期是10us,占空比为50%情况下,高电平应该是5us,也就是说,CCR配置成180时就完成了当前模块时钟下,标准模式I2C的时钟频率的设置。如果FREQR=08 (模块为8MHz) 则CCR=40即可使高电平为5us。

    3.Trise寄存器


    设置上升沿最大时间。
    根据STM32 F103的电气特性,最大上升时间为1us。
    写入TRISE[5:0]的值是最大允许时间除以模块时钟周期再加1。

    协议控制

    1.起始和停止信号



    控制寄存器中的START位并不是置1后就完成了整个有效合理的起始条件,在该位被置位后,要查看状态寄存器 SB 判断起始信号是不是产生了(总线空闲,收到起始信号后交出控制权):
    SB:起始位(主模式)。是否成功发送起始条件。SB置1,START自动置0。


    对于STOP位,也不是立马发送stop位,实际是一个配置项,延时生效,准备发送stop位。接收模式下,要等接收完成后再发送STOP

    2.应答和非应答信号


    CR1中的ACK:应答使能。是接收一个字节后返回应答。

    3.收发数据

    发送数据为例发送和接收使用一个数据寄存器,等发送寄存器为空时,再把当前数据写入数据寄存器。
    不用手动判断应答,直接判断BTF就可以检测字节发送是否完成


    7位设备地址以及一位方向位是否成功被发送。

    对于接收数据,使用RXNE判断接受数据寄存器是否空,以及STOPF位是否检测到停止工作。


    作者:咸蛋烧茄子

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32 I2C通讯协议的硬件配置

    发表回复