【STM32】AFIO 以及重映射

在配置外部中断的时候,打开GPIO时钟的时候,也同时打开了AFIO的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO,ENABLE);

AFIO

简单来说

MCU有对外管脚,包括CPU的管脚和内置外设(PWM,TIM,ADC......)的管脚;

他们都需要对外接口IO,但是管脚总数是有限的,有的管脚既作为普通IO,也作为外设IO,有时候甚至好几个内置外设共用一个IO,这就是管脚复用现象。

比如随便一个管脚的原理图上:

PA2/USART2_TX/ADC123_IN2/TIM5_CH3/TIM2_CH3

表明这个管脚除了作为普通PA2之外,还作为复用IO,有USART2,ADC,TIM5,TIM2等......

总结:

  1. 普通管脚就是GPIO,复用管脚(非普通管脚)就是AFIO;
  2. 只要用到内置外设的管脚,都需要打开复用IO(AFIO),比如对外输出PWM波形,使用AD转换等。

不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,只有使用了AFIO的事件控制寄存器AFIO的重映射功能 以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟。

单纯的IO口复用功能不需要开启AFIO时钟,remap需要。

例子

1.外部中断

c 复制代码
GPIO_InitTypeDef GPIO_InitStructure;//
EXTI_InitTypeDef EXTI_InitStructure;//

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//打开GPIO的时钟,打开AFIO的时钟,

使用外部中断时需要打开AFIO。

2.引脚的重映射

STM32有很多的内置外设I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。

但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的。

程序中用到的USART2外设的TX,RX分别对应PA2,PA3,但是板上的PA2,PA3引脚接了其他设备,但是为了还要用USART2,

"RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO"就打开了GPIOD重映射功能把USART2设备的TX,RX映射到PD5,PD6上,我们在这两个引脚上接上MAX232串口芯片就可以使用USART2串口通信了。

参考STM32f10X手册

重映射步骤

STM32F103VCT6 这个CPU的USART1接的是PB6/PB7 但是上电初始化后 默认功能并非是USART1.所以想要用串口功能 .必须用端口重映射...

1.打开重映射时钟和USART重映射后的I/O口引脚时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO,ENABLE);

2.I/O口重映射开启

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

3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置.

c 复制代码
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);

简单的说 STM32的 io 有3个功能 一个是默认的 一个是复用 一个是重映射功能(这个其实也属于复用)如果配置成复用 后开启功能则使用第2个功能。 如果配置成复用 同时 相应的重映射配置了 则将使用第3个功能通常一个口的 。

相关推荐
CODECOLLECT1 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen2 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠5 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_5 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技7 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计7 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦8 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报8 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业8 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能8 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微