2.AFIO 外设:复用和重映射

在 STM32 微控制器中,AFIO(Alternate Function I/O)模块用于管理和配置 GPIO 引脚的复用功能和重映射。以下是使用 AFIO 的几个关键原因:

  1. 引脚复用:STM32 微控制器的 GPIO 引脚通常具有多种复用功能,例如可以作为普通 I/O 或者映射为特定外设(如 USART、SPI、I2C 等)的功能引脚。通过 AFIO,可以选择引脚的复用功能。

  2. 引脚重映射:某些外设的功能引脚可以重映射到其他 GPIO 引脚,以适应不同的硬件设计需求。AFIO 允许开发者通过软件配置重映射,从而改变外设的默认引脚分配。

  3. 外部中断/事件管理:STM32 的 GPIO 引脚可以配置为外部中断或事件输入源。AFIO 提供了必要的配置寄存器来管理这些外部中断/事件线。

  4. 节省引脚资源:通过使用复用和重映射功能,可以减少所需的物理引脚数量,从而节省 PCB 空间和成本。

  5. 提高灵活性:AFIO 提供了编程灵活性,允许开发者根据具体的应用需求来配置引脚功能,而不是受限于固定的硬件设计。

  6. 支持高级功能:AFIO 还支持一些高级功能,如事件控制和调试配置,这些功能对于实现复杂的嵌入式系统至关重要。

  7. 解决引脚冲突:当多个外设功能映射到同一个 GPIO 引脚时,AFIO 可以用于解决这种冲突,通过重映射将功能引脚映射到其他引脚。

  8. 支持外部中断线映射:AFIO 允许将外部中断线映射到任意 GPIO 引脚,这对于创建灵活的中断系统非常有用。

总之,AFIO 是 STM32 微控制器中一个非常关键的模块,它为 GPIO 引脚的复用和重映射提供了强大的支持,使得硬件设计和软件开发更加灵活和高效。

在 STM32 中使用 AFIO时钟 进行 GPIO 复用和重映射的步骤如下:

  1. 使能 GPIO 端口时钟

    首先需要使能你将要使用的 GPIO 端口的时钟。例如,如果你要使用 GPIOA:

    c 复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  2. 使能外设时钟

    你还需要使能与 GPIO 端口相关的外设时钟,比如 USART:

    c 复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  3. 使能 AFIO 时钟

    如果你需要进行引脚重映射,必须使能 AFIO 时钟:

    c 复制代码
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  4. 配置 GPIO 模式

    设置 GPIO 端口的模式,以便将其配置为复用功能。例如,将 PA9 配置为 USART1 的 TX 引脚:

    c 复制代码
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 推挽复用输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);
  5. 进行引脚重映射(如果需要)

    如果你需要将某个外设的引脚从默认引脚重映射到其他引脚,使用如下代码:

    c 复制代码
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);

通过以上步骤,你可以成功配置 STM32 的 GPIO 复用功能和引脚重映射。需要注意的是,只有在使用 AFIO 的事件控制寄存器、重映射功能以及外部中断时,才需要开启 AFIO 时钟。

ST官网:https://shequ.stmicroelectronics.cn/thread-638169-1-1.html

相关推荐
LCG元1 天前
STM32实战:基于STM32F103的Bootloader设计与IAP在线升级
javascript·stm32·嵌入式硬件
LCMICRO-133108477461 天前
长芯微LCMDC8584完全P2P替代ADS8584,是一款16位、4通道同步采样的逐次逼近型(SAR)模数转换器(ADC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·模数转换器adc
STC_USB_CAN_80511 天前
菜单学习,科学计算器使用【TFT240*320彩屏+实际键盘】@Ai8051U,ST7789
单片机·学习·51单片机
FreakStudio1 天前
无硬件学LVGL—定时器篇:基于Web模拟器+MicroPython速通GUI开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
异方辰电子1 天前
8.原理图为什么看不到具体的电路(比如STM32的晶振等)
stm32·单片机·嵌入式硬件
richxu202510011 天前
嵌入式学习之路->stm32篇->(11)SPI通信(下)
stm32·嵌入式硬件·学习
W.W.H.1 天前
FreeRTOS移植(保姆级教程)
经验分享·单片机·操作系统·freertos·rtos
LCG元1 天前
STM32实战:基于STM32F103的智能消防报警联动系统
stm32·单片机·嵌入式硬件
ivy159868377151 天前
CH32V203G6U6 ‌沁恒32位 RISC-V 微控制器(MCU)‌
单片机·嵌入式硬件·risc-v
blevoice1 天前
杰理蓝牙音箱开发板AC696N上演示降本设计:AC696N“省晶振”方案配置
单片机·嵌入式硬件·jl杰理蓝牙音频芯片·杰理ac696n开发板·ac6966b蓝牙音响芯片·蓝牙芯片ble透传·杰理蓝牙音箱方案开发