STM32之AFIO

STM32中的AFIO(Alternate Function I/O)允许外设功能在不同GPIO间重映射。理解AFIO对于灵活使用USART2和TIM2等外设至关重要。开启AFIO时钟并非使用IO复用功能的必要条件,仅在使用事件控制、重映射和外部中断功能时需要。同时使用USART2和TIM2在同一组IO上需通过AFIO寄存器进行重映射,否则可能导致两者都无法正常工作。正确的做法是根据需求选择重映射策略,避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32之AFIO

也许你以为IO和AFIO是很简单的,事实上有几个误区可能很多人都没注意过,当你只用现成的开发板来学习的时候,别人已经帮你做好了资源分配,所有的外设功能学习都是照着别人给你的例程去做的,这才没让你觉得奇怪。

先问自己一个问题:STM32中,USART2和TIM2是共用相同IO的,你如何决定这几个IO到底是做USART2还是做TIM2呢?如果你要同时使用USART2和TIM2,该怎么办?

1、不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,参考下图

只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟,STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟,这是个误区。

例如下面的,最常用的USART1,如果你的板子上,默认用的就是PA9和PA10这两个IO作为USART1的TX和TX,那么也就是没有重映射,No Remap,这种情况下根本不需要开启AFIO时钟,只要开启USART1的外设时钟就行了。这个实验很简单,自己试试就知道了。

2、从上面的图你可以看到,原来USART1是可以放在PB6和PB7上面的,只不过几乎所有的原理图封装中都不会在PB6和PB7的复用功能上标出它可以当USART1用,毕竟这种重映射的情况太多,几乎所有外设都可以重映射,每个都标出来会非常混乱。

STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0~PA3上面,具体要如何选择这两个功能呢?

如果要使用USART2

### STM32AFIO 的功能与引脚重映射 #### 什么是 AFIOAFIO(Alternate Function I/O)模块在 STM32 微控制器中扮演着重要角色,主要用于管理和配置 GPIO 引脚的复用功能以及引脚重映射。通过 AFIO 模块,开发人员能够灵活地调整某些外设信号所对应的物理引脚位置,从而优化硬件设计并减少 PCB 布线复杂度[^3]。 #### AFIO 的主要作用 1. **引脚重映射** 当多个外设共享同一组引脚时,可能会发生资源冲突。此时可以通过 AFIO 将某个外设的功能从默认引脚重新映射到其他可用引脚上。这种机制特别适用于高密度封装芯片(如 LQFP100),以便更好地利用有限的 IO 资源[^2]。 2. **简化布线设计** 在实际应用中,PCB 设计可能受到空间限制或其他因素影响,导致无法按照默认引脚布局连接电路。借助 AFIO 提供的重映射能力,可以将特定功能移动至更方便的位置,降低设计难度[^4]。 3. **增强灵活性** 不同型号的 STM32 单片机具有不同的引脚排列方式。即使在同一款 MCU 上也可能存在多种工作模式需求。因此,支持动态切换不同映射方案显得尤为重要[^5]。 #### 如何实现引脚重映射? 下面是一个简单的例子来说明如何完成 TIM3 PWM 输出波形的引脚重映射操作: ```c #include "stm32f1xx.h" void TimerPinRemap(void){ // 开启 AFIO 和 GPIOA 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA ,ENABLE); // 配置 TIM3 CH1 到 PA6 (全重映射) GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); // 初始化 GPIOA GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; // 设置为推挽输出模式 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 最大速度 50 MHz GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 ; // 定义使用的具体管脚号 GPIO_Init(GPIOA,&GPIO_InitStruct); } ``` 上述代码片段展示了启用 `TIM3` 全部通道完全重定向的过程,并将其绑定到了新的目标端口——即 PA6 上面去。 #### 注意事项 - 在执行任何涉及修改硬件行为的操作之前,请务必查阅官方数据手册确认当前设备版本是否兼容所需特性; - 正确初始化相关外设及其关联组件至关重要,否则可能导致预期之外的结果甚至损坏器件本身; ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值