STM32F103x8B PB3、PB4、PA14、PA15引脚作为普通IO口使用

STM32的PB3、PB4、PA14、PA15引脚可以在使用ISP烧录的情况下释放出来,作为普通IO口使用。

初始化代码如下:


void Gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_3); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_14); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_15); }



在实际测试的时候,若发现工程内上述引脚仍无法当做普通IO使用,很可能是上述初始化代码后还执行了GPIOA或GPIOB的时钟使能代码,解决办法为:上面这段初始化代码放在所有IO初始化最后就好了。

问题原因:

当把PB3、PB4、PA14、PA15初始化之后,若再次调用GPIOA或GPIOB端口的时钟使能代码的话,会使得这些引脚变回JTAG或SWD的引脚

即上述初始化完成之后不能再执行:

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);


否则引脚会变回JTAG或SWD的引脚,而无法作为普通IO使用


注:上述初始化代码把所用引脚均配置为推挽输出,可根据需要自行配置为其他模式





你可能感兴趣的:(Hardwares)