STM32F103 PB3/PB4/PA13/PA14/PA5无法控制问题
做项目时,发现使用PA15引脚口时,引脚无法进行输出高低控制,经查证发现,
PB3,PB4,PA13,PA14,PA15是特殊的IO口,用作JTAG/SWD仿真器的调试接口。其中PA13,PA14分别作为SWD调试的SWIO和SWCLK;PB3,PB4,PA13,PA14,PA15共同用于JTAG。
对于ST-LINK来说,下载和调试程序需要用到PA13(SWIO)和PA14(SWCLK)引脚。所以PA15、PB4、PB3三个引脚可以当做普通IO来使用,即端口重映射。具体实现步骤为:
1、打开复用时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
2、对三个引脚进行重映射:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
原因:这几个IO口是特殊引脚,如果要做普通IO口,需要禁用JATG&SWD
例如要将PA15用做普通IO口,初始化代码如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
注意事项:
三个引脚重映射后不可以再次初始化复用时钟,否则PA15、PB4、PB3三个引脚会重新变回调试引脚。
即不能再调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);