STM32的IIC笔记

11 篇文章 4 订阅

白费

I2C 速率:

  • 标准模式 —— 100kHz
  • 快速模式 —— 400kHz
  • 快速模式+ —— 1MHz

I2C 时钟源:

  • SYSCLK
  • HSI

输出为I2CCLK
隶属于APB1

在这里插入图片描述

I2C的波特率

在这里插入图片描述
在这里插入图片描述

上述两张图中可以得到计算波特率公式:
tSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}

  • tSCL 输出波特率周期
  • tSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
    DNF: 在CR1寄存器中配置
    tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
  • tSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
    DNF: 在CR1寄存器中配置
    tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
  • SCLH 在 TIMINGR 寄存器中配置 bit[15:8]
  • SCLL 在 TIMINGR 寄存器中配置 bit[7:0]
  • PRESC 在 TIMINGR 寄存器中配置 bit[31:28]
  • tI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】

官方手册中提供了查表,非常方便:
8MHz查表

I2C的软件复位

当清除PE位(I2C_CR1),会产生I2C的软件复位。
软件复位会重置下述寄存器:

  1. I2C_CR2 register: START, STOP, NACK
  2. I2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR

当处于SMbus状态下,下述寄存器也会被重置:

  1. I2C_CR2 register: PECBYTE
  2. I2C_ISR register: PECERR, TIMEOUT, ALERT

PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。

官方推荐复位操作:

  1. PE = 0; (Write PE = 0)
  2. PE == 0 ?(Check PE = 0)
  3. PE = 1; (Write PE = 1)

I2C的数据接收

在这里插入图片描述
I2C 接收分为 移位寄存器RXDR寄存器

SDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。

I2C的数据发送

在这里插入图片描述
I2C的发送分为 移位寄存器TXDR寄存器

移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。

想的挺好 BUSY 一直置位 白费 不会了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值