STM32 I2C模块初始化代码
#include stm32f10x.h void My_I2C_Init(void); int main(void) { My_I2C_Init(); while(1) { } } void My_I2C_Init(void) { //#1 IO引脚初始化 // 对I2C1进行重映射AFIO时钟APB2总线宏必须写全 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 错误1原代码少了数字2 GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE); // 初始化PB8(PB8SCL)、PB9(PB9SDA) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 错误2原代码末尾**缺少分号** GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_OD; // 开漏复用输出I2C标准模式 GPIO_InitStruct.GPIO_Speed GPIO_Speed_2MHz; // 错误3原代码拼写2Mz → 正确2MHz GPIO_Init(GPIOB, GPIO_InitStruct); //#2 初始化I2C1模块I2C1挂载在 APB1 总线 RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); // 错误4原函数名/宏少了数字1 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); // 错误5Rest→Reset少1 RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE);// 释放复位 // 错误6原代码**缺失I2C初始化必备参数**标准库结构体必须赋全值 I2C_InitTypeDef I2C_InitStruct; I2C_InitStruct.I2C_ClockSpeed 400000; // 400KHz快速模式 I2C_InitStruct.I2C_Mode I2C_Mode_I2C; // I2C模式 I2C_InitStruct.I2C_DutyCycle I2C_DutyCycle_2; // 占空比 I2C_InitStruct.I2C_OwnAddress1 0x00; // 自身地址主机模式随便填 I2C_Init(I2C1, I2C_InitStruct); I2C_Cmd(I2C1, ENABLE); // 错误7原代码注释用/ → 正确// }