(十一)STM32——IO引脚复用与映射

目录

端口复用

端口复用映射原理 

GPIOx AFRL

GPIOx AFRH ​

流程


端口复用

        STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

        例如串口1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用 

 

        那我们如何去寻找我们所需要的串口引脚呢?当然需要去查看芯片手册啦!比如我们去寻找串口2的引脚,搜索一下USART2,就能出现啦!然后找到对应引脚就好啦!

 

端口复用映射原理 

  • STM32F4系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。这样可以确保共用同一个IO引脚的外设之问不会发生沖突。
  • 每个IO引脚都有一个复用器,该复用器采用16路复用功能输入(AF0到AF15)可通过GPIOx AFRL(针对引脚0-7)和GPIOx AFRH(针对引脚8-15)奇存器对这些输入进行配置,每四位控制一路复用。

GPIOx AFRL

GPIOx AFRH  

        比如我们要选择定时器3,只需要AFRH选择AF2,就实现了端口的复用。那么如何进行选择呢?这个时候就要用到我们的AFRL寄存器以及AFRH寄存器了!

 

        从表中可以看出,32 位寄存器 GPIOx_AFRL 每四个位控制一个 IO 口,所以每个寄存器控制 32/4=8 个 IO 口。寄存器对应四位的值配置决定这个 IO 映射到哪个复用功能 AF。

        对于外设复用功能的配置,除了 ADC 和 DAC 要将 IO 配置为模拟通道之外其他外设功能一律 要配置为复用功能模式,这个配置是在 IO 口对应的 GPIOx_MODER 寄存器中配置的。同时要配 置 GPIOx_AFRH 或者 GPIOx_AFRL 寄存器,将 IO 口通过复用器连接到所需要的复用功能对应的 AFx。 接下来,我们通过一个打开串口1的例子来说明一下整个流程!

流程

  • 首先,我们要使用 IO 复用功能外设,必须先打开对应的 IO 时钟和复用功能外设时钟。 
/*使能 GPIOA 时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); 
/*使能 USART1 时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  • 其次,我们在 GIPOx_MODER 寄存器中将所需 IO(对于串口 1 是 PA9,PA10)配置为复用功能(ADC 和 DAC 设置为模拟通道)
  • 再次,我们还需要对 IO 口的其他参数,例如类型,上拉/下拉以及输出速度。 上面两步,在我们库函数中是通过 GPIO_Init 函数来实现的,参考代码如下:
/*GPIOA9 与 GPIOA10 初始化*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
 GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9,PA10
  • 最后,我们配置 GPIOx_AFRL 或者 GPIOx_AFRH 寄存器,将 IO 连接到所需的 AFx。 这些步骤对于我们使用库函数来操作的话,是调用的 GPIO_PinAFConfig 函数来实现的。具 体操作代码如下:
/*PA9 连接 AF7,复用为 USART1_TX */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); 
/* PA10 连接 AF7,复用为 USART1_RX*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

        对于GPIO_PinAFConfig()函数,第一个参数是哪个GPIO,第二个参数为GPIO几,第三个就是确定哪个功能的,还是蛮好理解的。

猜你喜欢

转载自blog.csdn.net/weixin_66578482/article/details/125943693