一、端口复用
1.什么是端口复用?
STM32有很多内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO可以复用为内置外设的功能引脚。
例如串口1对应的引脚为PA9、PA10,串口2对应的引脚为PA2、PA3
2.端口复用的配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //不仅要使能GPIO,还要使能外设
USART_TX的引脚要配置为推挽复用输出
USART_RX的引脚要配置为浮空输入或带上拉输入。
二、端口重映射
1.一般的引脚都是固定不变的,而端口重映射就是一个外设的引脚除了默认的引脚外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。
例如串口2的引脚是PA2、PA3,我们可以使其映射到PD6、PD7上。使用PD6、PD7进行数据的发送和接收。
2.引脚重映射配置过程
(1)使能GPIO时钟(重映射后的IO口)。
(2)使能外设时钟(如使能串口1的时钟)。
(3)使能AFIO时钟。因为是重映射所以必须使能AFIO时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
(4)开启重映射
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
//串口3是支持部分重映射和全部重映射的
//下面两个参数是开启重映射的第一个参数
#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /*!< USART3 Partial Alternate Function mapping 部分重映射*/
#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030) /*!< USART3 Full Alternate Function mapping 全部重映射*/