STM32的引脚一般都可以有三种用法:普通引脚、复用成默认功能引脚和重定义功能,具体图在STM32数据手册(不是参考手册),如下
1、当我仅仅想把A2、A3当成普通引脚使用时(比如点灯),不需要使用复用、更不需要重定义(重映射)。正常配置输出模式、速度即可。
2、如下我想把A2、A3当做串口使用时,它可以从从上图看,他的默认复用功能时usart2_rx和tx。所以在配置时,还要配置 RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE)(不需要使用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE)去端口功能复用);
3、现在有这样一种情况:我想使用UART2去传输数据,但是我的B10、B11已经用成点灯且无法改变,那此时的做法如下:
如上图,我发现D8、D9的重定义功能是可以用来当uart3 使用的,则此时就需要配置复用功能和重定义(重映射)功能的语句
(1)、第一步:基本的引脚使能、UART3使能(因为要用到UART3和D8、D9)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD |RCC_APB1Periph_USART3, ENABLE );
(2)、第二步复用功能使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE); (情况二不需要)
(3)、第三步端口重映射使能:
GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
函数的第一个形参具体GPIO_PartialRemap_USART3(部分重映射)、GPIO_FullRemap_USART3(全映射)。两种那选什么呢,在STM32中文参考手册第119页有具体要求:
在此表中D8、D9被规定为完全重映射,所以重映射使能语句如下:
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);