STM32F07用PB8PB9来定义I2C1实现I2C功能
之前买了一个STM32F207ZGT的开发板,上面用到了I2C1的I2C总线,其中对应管脚为PB6和PB7,看手册之后发现PB8和PB9也能用作I2C1接口,在init的时候有一个 sEE_LowLevel_Init(),里面对于I2C1的管脚有定义。然后我把里面涉及PB6/PB7的管脚定义改成了PB8和PB9,结果I2C总线却不能使用了。示波器看TCK和TDA都没有波形。请问我的代码哪儿有问题,f207是否存在复用的问题,我尝试了加入代码:GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);显示参数GPIO_Remap_I2C1未定义。
第一段代码,I2C init:
void sEE_Init(void)
{
I2C_InitTypeDef I2C_InitStructure;
sEE_LowLevel_Init();
/*!< I2C configuration */
/* sEE_I2C configuration */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = I2C_SLAVE_ADDRESS7;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED;
I2C_Cmd(sEE_I2C, ENABLE);
}
第二段代码:sEE_LowLevel_Init:底层的GPIO口和I2C工作模式的定义。
void sEE_LowLevel_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*!< sEE_I2C Periph clock enable */
RCC_APB1PeriphClockCmd(sEE_I2C_CLK, ENABLE);
/*!< sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
RCC_AHB1PeriphClockCmd(sEE_I2C_SCL_GPIO_CLK | sEE_I2C_SDA_GPIO_CLK, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Reset sEE_I2C IP */
RCC_APB1PeriphResetCmd(sEE_I2C_CLK, ENABLE);
/* Release reset signal of sEE_I2C IP */
RCC_APB1PeriphResetCmd(sEE_I2C_CLK, DISABLE);
/*!< GPIO configuration */
/* Connect PXx to I2C_SCL*/
GPIO_PinAFConfig(sEE_I2C_SCL_GPIO_PORT, sEE_I2C_SCL_SOURCE, sEE_I2C_SCL_AF);
/* Connect PXx to I2C_SDA*/
GPIO_PinAFConfig(sEE_I2C_SDA_GPIO_PORT, sEE_I2C_SDA_SOURCE, sEE_I2C_SDA_AF);
/*!< Configure sEE_I2C pins: SCL */
GPIO_InitStructure.GPIO_Pin = sEE_I2C_SCL_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(sEE_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
/*!< Configure sEE_I2C pins: SDA */
GPIO_InitStructure.GPIO_Pin = sEE_I2C_SDA_PIN;
GPIO_Init(sEE_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
}
第三段代码:主要修改管脚定义
#define sEE_I2C I2C1
#define sEE_I2C_CLK RCC_APB1Periph_I2C1
#define sEE_I2C_SCL_PIN GPIO_Pin_8 /* PB.08 */
#define sEE_I2C_SCL_GPIO_PORT GPIOB /* GPIOB */
#define sEE_I2C_SCL_GPIO_CLK RCC_AHB1Periph_GPIOB
#define sEE_I2C_SCL_SOURCE GPIO_PinSource8
#define sEE_I2C_SCL_AF GPIO_AF_I2C1
#define sEE_I2C_SDA_PIN GPIO_Pin_9 /* PB.09 */
#define sEE_I2C_SDA_GPIO_PORT GPIOB /* GPIOB */
#define sEE_I2C_SDA_GPIO_CLK RCC_AHB1Periph_GPIOB
#define sEE_I2C_SDA_SOURCE GPIO_PinSource9
#define sEE_I2C_SDA_AF GPIO_AF_I2C1