为什么要重定义这个串口,大家去手册看一下,串口4是UART,串口3是USART,差了一个S,差距很大。而手册上同时也指出,该端口可以被重定义成串口3,所以,单片机终结者作为硬件软件一体化的专业设计公司现在告诉你一个小秘密大家用这个做设计一定很赞:硬件如果设置在这个端口又想用USART的话,你的运气还是很好的,你只需要在软件里重新定义一下就好。

此外不得不提,有时候为了防抄硬件,这个功能也是很好的防抄手段。

所以说大家以后小心点儿 ..言规正传.不知道是什么原因 PCB制图时把串口接到USART1上了,当时也没在意,等我把USART测试程序写好烧进去硬件仿真时,串口给的是乱码,我当时就觉得奇怪.把程序检查了好几遍就是查不出问题来,以为是硬件有问题,但突然想到了STM有复用功能,心想会不会是这里有鬼?于是找来datasheet 一看 ,真相大白

见下图:

重映射步骤为:

1.打开重映射时钟和USART重映射后的I/O口引脚时钟,

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启.

GPIO_PinRemapConfig(GPIO_Remap_USART4,ENABLE);

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);

只需要这三步,串口就可以正常使用了,简单吧?

 

也可参考:https://blog.csdn.net/qq_36338040/article/details/79201141