STM32使用I2C1,通过PB67可以正常调用PCA9685,输出信号控制LED(这里没有接上拉电阻也可以);但是把接口切换到I2C2,PB10和PB11,pca9685就不能工作是什么原因(这里先是用上拉电阻4.7KΩ,不能使用,1.5KΩ 也不行电阻在这里是并联在SCL和SDA上的,即:PB10--4.7kΩ--3.3V,PB10--PCA9685.SCL;PB11--4.7kΩ--3.3V,PB11--PCA9685.SDA)?查了资料说,I2C1内置有上拉电阻,不用上拉也能使用,I2C2没有上拉电阻,我配置了上拉还是不行;我感觉大概率是配置I2C初始化的问题,但是检查了代码感觉代码也没问题?下边是I2C的初始化代码,这里的注释还没改,只是先把代码改了
// I2C初始化
void I2C_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
// 使能GPIOB和I2C1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
// 配置I2C1引脚:PB6-SCL, PB7-SDA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; // 开漏输出
GPIO_Init(GPIOB, &GPIO_InitStructure);
// I2C1配置
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 100000; // 100kHz
I2C_Init(I2C2, &I2C_InitStructure);
I2C_Cmd(I2C2, ENABLE);
}