首先配置 I2C 1. 通过 APB 复位 I2C, 使能 I2C 时钟 2. 使能 GPIO 时钟, 配置 GPIO 在 AF OD 模式 3. 使能 I2C ( PE="1") 4. 设置速度参数 FREQ CCR F/S DUTY TRISE A : CR2.FREQR = 期望的I2C时钟, 一般设置为最大的时钟 36 MHz 确定了 Tck = 1 / FREQ -- 类似于 CANBus 的时间片 Tq B : PE="0", 设置适当的 CCR F/S DUTY 以及 TRISE, PE="1" 标准模式 Tlow : Thigh = 1 : 1 快速模式 Tlow : Thigh = 2 : 1 ( DUTY="0") 快速模式 Tlow : Thigh = 16 : 9 ( DUTY="1") 以上类似于 CANBus 的 Tseg1, Tseg2 设置 CCR 决定了时钟高低占用的 Tck 个数, 同时确定了时钟的Tbus 标准模式 Tbus = 2 Tck * CCR 快速模式 Tbus = 3 Tck * CCR 快速模式 Tbus = 25 Tck * CCR 首先设置 Tck, 然后根据期望的 TBus 设置 CCR F/S DUTY 假设 Tck = 125ns ( FREQ = 8 Mhz), 期望 100 khz Tbus="10us", 上升时间 Tr = 1000 ns 采用标准模式 F/S = 0 : CCR = Tbus / 2 / Tck = 10 000 / (1+1) / 125 = 40 = 0x28 TRISE = ( Tr / Tck ) + 1 = ( 1000 / 125 ) + 1 = 0x09 5. 配置 I2C 模式 : CR1 = ( ACK="1", SMBUS="0", PE="1" )
|