STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
简单易懂的说,就是某些普通的外设引脚也可以用来其它功能。比如说串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作普通的GPIO口,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。
我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位。
STM32的端口重映射有三种模式:
以TIM3为例,没有重映射就是使用复用端口引脚,如下图,没有重映射4个输出通道引脚分别是在PA6、PA7、PB0、PB1;部分重映射,从字面上理解就是只改变一部分输出或输入引脚的端口,部分重映射后,TIM3的通道1和通道2从原先的PA6、PA7引脚改变到PB4、PB5了,而通道3、通道4还是在PB0、PB1保持不变;完全重映射,引脚全部改变了,通道1到通道4从原先的PA6、PA7、PB0、PB1变为PC6~PC9。
还是以TIM3为例
可以重映射,但是要注意电平匹配。如果STM32串口的另一端是232电平,重映射的管脚就需要接MAX3232才能通信(如与PC机通信);如果你STM32串口的另一端是3.3V的另一片单片机,就不需要电平转换芯片,直接交叉相连即可。
引脚少的没有重映射功能,引脚多的才有重映射功能。
重映射就是说有些引脚能有映射某外设的能力。
打个比方:STM32F103RDT6的USB和CAN共用了一个IO引脚,那我既想用USB又想用CAN怎么办?就将CAN映射到另外两个引脚。这两个引脚不是随便定义的,是芯片已经定死只有那两个引脚可以映射CAN。
在原来没有复用功能的代码上你需要做的修改(这里以UART1复用为例):
1:打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
2:I/O口重映射开启.
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);
3:配制重映射引脚, 这里只需配置重映射后的I/O,原来的I/O配置删除或保留都行.
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);
STM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。 重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上!
本文标签:stm32的uart3引脚完全重映射