429 I2C CR2怎么设置?
429主频180M, APB1 45MHz. 而手册上写CR2 FREQ最多设置APB是42M。 请问429 I2C是怎么设置的?有没有例子?本帖最后由 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
--------------------------------------------------------------
首先配置 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]