logo

STM8 I2C从模式

以下资料由微雪电子整理并发布,未经许可不得转载,否则追究相应责任!

STM8 I2C从模式

为了产生正确的时序,必须在I2C_FREQR寄存器中设定该模块的输入时钟。输入时钟的频率必须至少是:

  • 标准模式下为:1MHz
  • 快速模式下为:4MHz
    一旦检测到起始条件,在SDA线上接收到的地址被送到移位寄存器。然后与STM8芯片自己的地址OARLSB和OAR2或者广播呼叫地址(如果ENGC=1)相比较。

注:在10位地址模式时,比较包括头段序列(11110xx0),其中的xx是地址的两个最高有效位。
头段或地址不匹配:I2C接口将其忽略并等待另一个起始条件。
头段匹配(仅10位模式):如果ACK位被置'1',I2C接口产生一个应答脉冲并等待8位从地址。
地址匹配:I2C接口产生以下时序:

  • 如果ACK被置'1',则产生一个应答脉冲
  • 硬件将ADDR位置为1;如果设置了ITEVFEN位,则产生一个中断
    在10位模式,接收到地址序列后,从设备总是处于接收模式。当接收到重复的起始条件,接着后面跟随与地址匹配的头序列并且最低位为'1'(即11110xx1)后,设备进入发送模式。
    在从模式下TRA位指示当前是处于接收模式还是发送模式。

从发送模式

在接收到地址和清除ADDR位后,从设备将字节从DR寄存器经由内部移位寄存器发送到SDA线上。

从设备保持SCL为低电平,直到ADDR位被清除并且待发送数据已写入DR寄存器。当收到应答脉冲时:

  • TxE位被硬件置为1,如果设置了ITEVFEN和ITBUFEN位,则产生一个中断。
    如果写入到DR寄存器,TxE位为1,但在上一次数据发送结束之前没有新数据写入到DR寄存器,则BTF位被置为1,I2C接口将保持SCL为低电平,以等待DR寄存器写操作。

STM8_从发送器的传送序列图
(图94:STM8从发送器的传送序列图)

从设备接收模式

在接收到地址并清除ADDR后,从接收器将通过内部移位寄存器从SDA线接收到的字节存进DR寄存器。I2C接口在接收到每个字节后都执行下列操作:

  • 如果设置了ACK位,则产生一个应答脉冲
  • 硬件设置RxNE=1。如果设置了ITEVFEN和ITBUFEN位,则产生一个中断。
    如果RxNE为1,并且在接收新的数据结束之前DR寄存器未被读出,BTF位被置位,I2C接口保持SCL为低电平,等待DR寄存器读操作(见下图)。

    STM8_从接收器的传送序列图
    (图95:STM8从接收器的传送序列图)

关闭从模式通信

在传输完最后一个数据字节后,主设备产生一个停止条件,I2C接口检测到这一条件时:

  • 设置STOPF=1,如果设置了ITEVFEN位,则产生一个中断。
    然后I2C接口等待读SR1寄存器,再写CR1寄存器。(见图95的EV4)。

STM8 I2C从模式

——