STM32端口复用与重映射概述与配置(使用HAL库)

文章目录

  • 前言
  • 一、什么是端口复用?什么是重映射?有什么区别?
  • 二、端口复用配置
  • 前言

    本篇文章介绍了在单片机开发过程中使用的端口复用与重映射。做自我学习的简单总结,不做权威使用,参考资料为正点原子STM32F1系列精英板HAL库开发手册。我也做了相关对比,其实HAL库与标准库差别不大,HAL库封装更多更好移植,原理上是通用的。

    一、什么是端口复用?什么是重映射?有什么区别?

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

    根据正点资料和自己搜索的资料,大概总结,端口复用就是一个端口有多个功能,我们查看原理图的时候有以下标志,表示是个复用端口,既可以作为PD2IO,还可以作为TIM定时器和UART串口和SDIO接口。

    映射就是寄存器配置,某一位改变其IO口的功能,比如使能第三位原来是串口的TX,由于不满足配置要求,比如电压、频率等,换成了使能第四位为TX,那么重映射后,引脚的物理位置发生变化。

    二、端口复用配置

    参考正点资料,例子为配置 GPOPA.9,GPIOA.10 口为串口 1 复用功能的一般步骤。
    1.首先,我们要使用 IO 复用功能,必须先打开对应的 IO 时钟和复用功能外设时钟,这里我们使用了 GPIOA 以及 USART1,所以我们需要使能 GPIOA 和 USART1 时钟。方法如下:

    __HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟 
    __HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟
    __HAL_RCC_AFIO_CLK_ENABLE(); //使能辅助功能 IO 时钟 
    

    2. 然后,我们在 GIPOx_MODER 寄存器中将所需 IO(对于串口 1 是 PA9,PA10)配置为复用功能。
    3. 最后,我们还需要对 IO 口的其他参数,例如上拉/下拉以及输出速度等进行配置。
    上面三步,在我们 HAL 库中是通过 HAL_GPIO_Init 函数来实现的,参考代码如下:

    GPIO_InitTypeDef GPIO_Initure; 
    GPIO_Initure.Pin=GPIO_PIN_9;//PA9 
    GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出 
    GPIO_Initure.Pull=GPIO_PULLUP;//上拉 
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速 
    HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9 
    

    通过上面的配置,PA9 复用为串口 1 的发送引脚。这个时候,PA9 将不再作为普通的 IO 口
    使用。对于 PA10,配置方法一样,修改 Pin 成员变量值为 PIN_10 即可。

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32端口复用与重映射概述与配置(使用HAL库)

    发表评论