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:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
  2. 使能外设时钟
    你还需要使能与 GPIO 端口相关的外设时钟,比如 USART:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    
  3. 使能 AFIO 时钟
    如果你需要进行引脚重映射,必须使能 AFIO 时钟:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    
  4. 配置 GPIO 模式
    设置 GPIO 端口的模式,以便将其配置为复用功能。例如,将 PA9 配置为 USART1 的 TX 引脚:

    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. 进行引脚重映射(如果需要)
    如果你需要将某个外设的引脚从默认引脚重映射到其他引脚,使用如下代码:

    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
    

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

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

### STM8 微控制器引脚复用功能及配置方法 STM8 是 STMicroelectronics 推出的一款基于 8 位架构的微控制器系列。其引脚复用功能允许单个物理引脚执行多种不同的外设功能,从而提高设计灵活性并减少所需的外部组件数量。 #### 引脚复用概述 在 STM8 中,某些 GPIO(通用输入/输出)引脚可以被配置为支持其他外设功能,例如 USART、I2C 或 SPI 等通信接口。这种多用途特性被称为 **引脚复用**。为了实现这些功能,需要通过软件设置特定寄存器来启用或禁用复用模式[^1]。 #### 配置流程详解 以下是针对 STM8 的引脚复用配置的一般过程: 1. **初始化 GPIO 寄存器** - 使用 `GPIO_CRx` (Control Register) 来定义引脚的方向(输入或输出)。对于复用功能,通常会将其设定为输出模式。 ```c // 设置端口 A 上的第一个引脚为输出模式 GPIOA->CR1 |= GPIO_CR1_MODE0; ``` 2. **选择外设功能** - 对于具有多个可能功能的引脚,需利用 `AFIO_MAPRx` (Alternate Function I/O Mapping Registers)指定具体的外设映射关系。这一步决定了该引脚将用于哪个外设模块。 ```c // 假设 PA0 被分配给 TIM1_CH1 功能,则修改 AFIO_MAPR1 相应位域 AFIO->MAPR1 &= ~AFIO_MAPR1_TIM1_REMAP; // 清除重映射标志 AFIO->MAPR1 |= AFIO_MAPR1_TIM1_PARTIAL_REMAP; // 启用部分重映射 ``` 3. **使能时钟源** - 在操作任何外设之前,必须确保对应的 APB 或 AHB 总线上的时钟已被开启。这是通过 RCC 控制器完成的。 ```c // 打开 TIM1 外设时钟供应 RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; ``` 4. **调整外设参数** - 根据实际需求对外设的工作方式进一步细化调节,比如波特率、分频系数等数值设定。 以上步骤综合起来构成了完整的 STM8 引脚复用配置逻辑框架。 #### 示例代码展示 下面给出一段简单的 C 语言程序片段作为示范,演示如何把 STM8L152 MCU 的某个 GPIO 引脚切换至 UART 发送角色: ```c #include "stm8s.h" void uart_init(void){ // Step 1: Set up the pin as alternate function output. GPIO_Init(GPIOA, GPIO_PIN_9, GPIO_MODE_OUT_PP_LOW_FAST); // Step 2: Enable clock for USART1 peripheral and configure it properly. CLK_PeripheralClockConfig(CLK_PERIPHERAL_USART1, ENABLE); // Configure baudrate etc... } int main(){ uart_init(); while(1){ /* Main loop */ } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值