小学生
最后登录1970-1-1
在线时间 小时
注册时间2019-4-17
|
本帖最后由 zxw781 于 2019-6-9 16:42 编辑
手里有一个STM32F411的板子,最近被I2C搞崩溃了,I2C1接口正常,初始化没有问题,但是I2C3不知道为什么,同样的代码,只要一初始化,SDA马上拉低,不进行初始化,SCL和SDA都是高电平,只要进行完初始化,SDA就会被拉低。关键是同样的代码,用在I2C1接口就是正常的。实在找不到原因了,请高手给指导一下,万分感谢!下面是初始化代码:
void STM32_I2C3_Config(void)
{
/*开I2C3时钟*/
//I2C外设时钟
RCC_APB1PeriphClockCmd(STM32_I2C3_CLK,ENABLE);
//I2C3_GPIO时钟
RCC_AHB1PeriphClockCmd(STM32_I2C3_SCL_CLK | STM32_I2C3_SDA_CLK,ENABLE);
/*GPIO引脚连接到I2C3外设*/
//SCL
GPIO_PinAFConfig(STM32_I2C3_SCL_GPIO,STM32_I2C3_SCL_SOURCE,STM32_I2C3_SCL_AF);
//SDA
GPIO_PinAFConfig(STM32_I2C3_SDA_GPIO,STM32_I2C3_SDA_SOURCE,STM32_I2C3_SDA_AF);
/*定义初始化结构体*/
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStruct;
/*配置GPIO初始化结构体成员*/
//SCL配置
GPIO_InitStruct.GPIO_Pin = STM32_I2C3_SCL_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
/*调用GPIO初始化函数,把配置好的结构体成员的参数写入到寄存器*/
GPIO_Init(STM32_I2C3_SCL_GPIO,&GPIO_InitStruct);
//SDA配置
GPIO_InitStruct.GPIO_Pin = STM32_I2C3_SDA_PIN;
//GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
//GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
//GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(STM32_I2C3_SDA_GPIO,&GPIO_InitStruct);
/*I2C寄存器恢复初始值*/
I2C_DeInit(STM32_I2C3);
/*I2C结构体配置*/
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = STM32_I2C3_Speed;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_OwnAddress1 = STM32_I2C3_OwnAddress;
/*调用I2C初始化函数,把配置好的结构体成员的参数写入到寄存器*/
I2C_Init(STM32_I2C3,&I2C_InitStruct);
//使能I2C
I2C_Cmd(STM32_I2C3,ENABLE);
}
|
|