使用的正点原子的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管脚数据读取正常,使用复用管脚时读不出数据,请问什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
软件模拟i2C岂不是任意两个IO口都可以用来作为i2c接口,那为啥还要整个复用?
一周热门 更多>