它自己默认每个管脚有自己的复用功能,但是这个管脚你用了,但你想要用它的其他功能,你就可以将这个功能重映射到其他管脚。使用复用功能是要保持一个功能使能,其他功能非使能状态
重映射指的是内部功能转移到别的引脚上去,芯片内部已经固定了只能映射到固定的地方。若使用TIM3重映射到其他引脚上,则先要配置TIM3重映射到该引脚,然后在按该引脚的复用功能配置
F103重映射实例:
1.打开重映射时钟和USART重映射后的I/O口引脚时钟,
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
//使能对应IO口的时钟,因为是复用功能所以还要使能AFIO时钟
2.I/O口重映射开启.
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
3.配制重映射后的引脚: 这里只需配置重映射后的I/O(PB6,PB7),原来的不需要去配置(PA9,PA10).
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
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_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
F429重映射实例:
以usart2的TX,RX为例
USART2的TX,RX对应的PIN脚分别为:PD5,PD6
1) 首先,我们要使用IO复用功能外设,必须先打开对应的IO时钟和复用功能外设时钟。
USART2在APB1总线上
这里需要说明一下,官方库提供了五个打开GPIO和外设时钟的函数分别为:
这五个函数分别用来打开相应的总线下GPIO和外设时钟。比如我们的串口2是挂载在APB1总线之下,所以我们调用对应的APB1总线下外设时钟使能函数RCC_APB1PeriphClockCmd来使能串口2时钟。对于其他外设我们调用相应的函数即可。
2) 其次,我们在GIPOx_MODER寄存器中将所需IO(对于串口2是PD5,PD6)配置为复用功能(ADC和DAC设置为模拟通道)。
3)再次,我们还需要对IO口的其他参数,例如类型,上拉/下拉以及输出速度。
上面两步,在我们库函数中是通过GPIO_Init函数来实现的,参考代码如下:
4)最后,我们配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。这些步骤对于我们使用库函数来操作的话,是调用的