1.GPIO的重映射属于AFIO,不同类型不同引脚数单片机情况不一样,比如下图:
2.AFIO 下面还分default/Remap,如果用到了remap就得使用:
GPIO_PinRemapConfig ( uint32_t GPIO_Remap, FunctionalState NewState )
比如:GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
3.如果用到了AFIO,还得开AFIO时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
4.stm32f103cbt6,12/13脚 AFIO的default分别为usart2 tx/rx,但没有用到remap,所以不用GPIO_PinRemapConfig 函数
5. 如下配置
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; // uart2,PA2 TX / PA3 RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);