winamp123 发表于 2014-11-30 18:29:59

429 I2C CR2怎么设置?

429主频180M, APB1 45MHz. 而手册上写CR2 FREQ最多设置APB是42M。 请问429 I2C是怎么设置的?有没有例子?

Dylan疾风闪电 发表于 2014-12-11 10:33:39

本帖最后由 Dylan疾风闪电 于 2014-12-11 10:36 编辑

官网的STM32F429I-Discovery例程中有I2C的例子。
--------------------------------------------------------------
下面的附件截取自STM32F429探索套件官方例程“stm32cubef4\STM32Cube_FW_F4_V1.1.0\Projects\STM32F429I-Discovery\Examples\I2C”
本论坛内的下载地址是:https://www.stmcu.org.cn/document/list/index/category-634
--------------------------------------------------------------





wambob 发表于 2014-12-11 20:11:07

首先配置 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时钟, 一般设置为最大的时钟
确定了 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" )

页: [1]
查看完整版本: 429 I2C CR2怎么设置?