STM32/F767管脚复用问题

2019-07-20 14:04发布

使用的正点原子的STM32/F767,如下图,管脚PB8和PB9是复用的,我想使用其复用的I2C功能。


其管脚初始化如下,



#define SDA_IN()  {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;}        //PB9输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //PB9输出模式
//IO2ù×÷
#define IIC_SCL(n)  (n?HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET):HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)) //SCL,0/1表示高低
#define IIC_SDA(n)  (n?HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET):HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)) //SDA,0/1表示高低
#define READ_SDA    HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)  //读PB9引脚值


void IIC_Init(void)
{
    GPIO_InitTypeDef GPIO_Initure;

    __HAL_RCC_GPIOB_CLK_ENABLE();   //使能GPIO时钟
    __HAL_RCC_I2C1_CLK_ENABLE();        //使能I2C时钟

    GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9;
    GPIO_Initure.Mode=GPIO_MODE_AF_OD;  
    GPIO_Initure.Pull=GPIO_PULLUP;         
    GPIO_Initure.Speed=GPIO_SPEED_FAST;     
        GPIO_Initure.Alternate=GPIO_AF4_I2C1;        //复用为I2C
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);

    IIC_SDA(1);          //SDA=1
    IIC_SCL(1);  //SCL=1
}



我在使用板子默认的I2C管脚数据读取正常,使用复用管脚时读不出数据,请问什么原因?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。