stm32 端口复用与重映射的基本知识

1.什么是端口复用
复用就是多用,也就是除了能用作普通的IO功能外还可以驱动其他外设。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

例如串口1 的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。
在这里插入图片描述
2.端口复用配置过程
-以PA9,PA10配置为串口1为例
(2.1)GPIO端口时钟使能。
调用 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
(2.2)复用外设时钟使能。
比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。
调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
(2.3)端口模式配置。调用 GPIO_Init()函数。当使用复用功能时,具体配置为八种模式的哪一种要查表:
在这里插入图片描述
TX为推挽复用输出,RX为浮空或上拉输入。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//①IO时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//②外设时钟使能

//③初始化IO为对应的模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9//复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_Init(GPIOA, &GPIO_InitStructure);
  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10  浮空输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure);  

3.何为端口重映射
每个内置外设都有若干个输入输出引脚,一般这些引脚的输出端口都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。

4.AFIO(复用功能)重映射的操作步骤
(4.1)使能被映射到的IO端口的时钟
(4.2)使能被重映射的外设功能时钟
(4.3)使能AFIO功能的时钟
(4.4)进行重映射

--以串口1为例子--:

在这里插入图片描述
可以看到串口1重映射到PB6,PB7。

-1.使能GPIO时钟(重映射后的IO,也就是GPIOB);
-2.使能被重映射的外设功能时钟(即串口1);
-3.使能AFIO时钟。重映射必须使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-4.开启重映射
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);


注1: GPIO_PinRemapConfig函数根据第一个参数确定是完全重映射还是部分重映射。如下图
在这里插入图片描述
在这里插入图片描述
注2: 关于部分映射
在这里插入图片描述

注3 哪些情况需要开启AFIO辅助功能时钟:
对寄存器AFIO_MAPR,AFIO_EXTICRX和AFIO_EVCR进行读写操作前,应当首先打开AFIO时钟。

AFIO_MAPR:配置复用功能重映射
AFIO_EXTICRX:配置外部中断线映射
AFIO_EVCR: 配置EVENTOUT事件输出
这也是(4.3)必须使能AFIO时钟的原因

发布了74 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/naruhina/article/details/97789055