STM32
直播中

杨春林

7年用户 923经验值
私信 关注
[问答]

请问STM32F429I I2C CR2怎么设置?

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

回帖(1)

李鑫

2024-5-17 18:12:13
STM32F429I是一款基于ARM Cortex-M4处理器的微控制器,具有高速I2C接口。在配置I2C接口时,需要正确设置CR2寄存器。CR2寄存器主要用于设置I2C时钟频率和I2C总线速度。

首先,我们需要了解STM32F429I的时钟配置。根据您提供的信息,主频为180MHz,APB1时钟为45MHz。I2C时钟频率(I2CCLK)应小于APB1时钟的1/10,以满足手册中的要求。

接下来,我们可以通过以下步骤设置I2C CR2寄存器:

1. 计算I2C时钟分频值(I2CCLK):由于手册要求I2CCLK应小于APB1时钟的1/10,我们可以将I2C时钟设置为APB1时钟的1/10,即4.5MHz。但是,由于实际硬件可能无法达到这个值,我们可以将其设置为4MHz。

2. 计算I2C时钟分频系数(I2C_CCR):I2C_CCR = (APB1时钟) / (I2CCLK * 3)。将我们计算的I2CCLK值代入公式,得到I2C_CCR = (45MHz) / (4MHz * 3) = 3.75。由于I2C_CCR必须是整数,我们可以将其四舍五入为4。

3. 设置CR2寄存器的FREQ位:根据手册,FREQ位用于设置I2C总线速度。当FREQ为0时,总线速度为标准模式(100kHz);当FREQ为1时,总线速度为快速模式(400kHz)。根据您的需求,可以选择相应的FREQ值。

4. 配置CR2寄存器:将计算得到的I2C_CCR值设置到CR2寄存器的CCR位,并将FREQ位设置为所需的总线速度。

例如,如果您希望使用标准模式(100kHz)的I2C总线速度,可以这样设置CR2寄存器:

```c
I2Cx->CR2 &= ~I2C_CR2_FREQ_Msk; // 清除FREQ位
I2Cx->CR2 |= (0 << I2C_CR2_FREQ_Pos); // 设置FREQ为0(标准模式)

I2Cx->CR2 &= ~I2C_CR2_CCR_Msk; // 清除CCR位
I2Cx->CR2 |= (4 << I2C_CR2_CCR_Pos); // 设置CCR为4(I2C时钟分频系数)
```

请注意,这里的`I2Cx`应替换为您正在使用的I2C外设的寄存器地址。

这样,您就可以根据STM32F429I的时钟配置和所需的I2C总线速度,正确设置I2C CR2寄存器。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分