stm32f030 内部时钟设置i2c
时间: 2023-11-02 15:03:08 浏览: 302
在STM32F030系列微控制器中设置I2C时,需要配置和设置两个主要的部分:内部时钟源和I2C参数。
对于内部时钟源,STM32F030微控制器提供了几种选择,包括HSI(内部高速时钟),HSE(外部高速时钟)和LSI(内部低速时钟)。一般情况下,我们可以使用HSI作为内部时钟源。
首先,我们需要开启HSI内部高速时钟,并等待其稳定:
RCC->CR |= RCC_CR_HSION; // 开启HSI时钟
while((RCC->CR & RCC_CR_HSIRDY) == 0); // 等待HSI稳定
然后,我们需要选择I2C时钟源为HSI,并设置为标准模式(标准模式为100kHz):
RCC->CFGR3 |= RCC_CFGR3_I2C1SW_HSI; // 将I2C时钟源设置为HSI
I2C1->CR2 &= ~(I2C_CR2_FREQ); // 清空原来的频率设置
I2C1->CR2 |= 8; // 设置I2C时钟频率为8MHz
接下来,我们需要配置I2C参数,如I2C地址、传输模式、时钟控制等:
I2C1->CR1 &= ~(I2C_CR1_PE); // 关闭I2C控制器
I2C1->CR1 |= I2C_CR1_ANFOFF; // 关闭模拟滤波器
I2C1->CR1 &= ~(I2C_CR1_ERRIE); // 禁止错误中断
I2C1->CR1 &= ~(I2C_CR1_NOSTRETCH); // 使能时钟拉伸
I2C1->CR2 &= ~(I2C_CR2_FREQ); // 清空原来的频率设置
I2C1->CR2 |= 8; // 设置I2C时钟频率为8MHz
I2C1->CCR &= ~(I2C_CCR_FS | I2C_CCR_DUTY); // 将I2C传输模式设置为标准模式
I2C1->CCR |= 0x1; // 设置I2C时钟控制为100kHz
I2C1->TRISE = 9; // 设置I2C上升时间
最后,使能I2C控制器并选择I2C模式:
I2C1->CR1 |= I2C_CR1_PE; // 使能I2C控制器
I2C1->CR1 |= I2C_CR1_ACK; // 使能应答模式
以上就是在STM32F030内部设置I2C的步骤,通过适当的配置和设置,可以使I2C正常运行并满足应用需求。
阅读全文