在使用PB3和PB4做普通GPIO使用时,发现普通的GPIO初始化程序无法正常使用PB3和PB4,后经查阅资料,发现是因为PB3和PB4在默认情况下是做JTAG调试用的。如果需要将其当普通GPIO使用,需要关闭JTAG调试功能;
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//必须要先开时钟,再重映射;如果先重映射再开时钟,会重新恢复默认功能,重映射失败
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
//这句表示关闭jtag,使能swd。
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOB, &GPIO_InitStruct);
}
注1:如果将五个引脚当做普通IO口,那么上述步骤二中的重映射配置应写为:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
注2:如果你用PB3,PB4,PA15做普通IO,PA13&14用于SWD调试,则重映射配置应写为:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
注3:配置只用PB4可为普通IO口:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);