stm32入门须知(二)AFIO是什么
AFIO是Alternate Function I/O的缩写,即“复用功能I/O”——STM32的GPIO引脚除了普通输入/输出,还能切换为外设的专用功能(如UART的TX/RX、SPI的SCLK/MOSI等),AFIO就是管理这种“引脚复用”的外设。
核心作用
1. 引脚功能切换:比如PA9引脚默认是普通GPIO,通过AFIO配置可切换为UART1的TX引脚,实现串口通信。
2. 中断引脚映射:外部中断(EXTI)的引脚需要通过AFIO配置映射(比如将PA0映射到EXTI0中断线)。
3. 重映射功能:部分外设的引脚可通过AFIO重映射到其他GPIO(如将TIM1的PWM引脚从PA8重映射到PB13),灵活分配引脚资源。
关键使用场景
- 用GPIO实现串口、SPI、I2C、定时器等外设功能时,需先配置AFIO。
- 配置外部中断时,必须通过AFIO的EXTICR寄存器指定中断引脚。
AFIO配置PA9为UART1_TX引脚的示例代码
#include "stm32f10x.h"
// 函数功能:配置PA9为UART1_TX(复用推挽输出),PA10为UART1_RX(浮空输入)
void UART1_GPIO_Init(void) {
// 1. 开启GPIOA和AFIO的时钟(复用功能必须开启AFIO时钟!)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
// 2. 定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;
// 3. 配置PA9(UART1_TX,复用推挽输出)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
// 复用推挽输出:引脚作为外设功能输出,而非普通GPIO输出
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
// 4. 配置PA10(UART1_RX,浮空输入)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
// 浮空输入:适合接收外设信号(无需上拉/下拉电阻)
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
// (可选)UART1串口初始化(含波特率配置)
void UART1_Init(uint32_t baudrate) {
UART1_GPIO_Init(); // 先初始化GPIO复用功能
// 开启UART1时钟(UART1挂在APB2总线)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// 配置UART结构体
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = baudrate; // 波特率(如9600、115200)
USART_InitStruct.USART_WordLength = USART_WordLength_8b; // 8位数据位
USART_InitStruct.USART_StopBits = USART_StopBits_1; // 1位停止位
USART_InitStruct.USART_Parity = USART_Parity_No; // 无校验位
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控
USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; // 收发模式
USART_Init(USART1, &USART_InitStruct);
USART_Cmd(USART1, ENABLE); // 使能UART1
}
// 主函数调用示例
int main(void) {
UART1_Init(115200); // 初始化UART1,波特率115200
while(1) {
// 可添加串口发送代码(如USART_SendData(USART1, 'A');)
}
}
核心要点解析
1. AFIO时钟必须开启:第8行同时开启 GPIOA 和 AFIO 时钟,这是复用功能生效的前提——若只开GPIOA时钟,PA9仍为普通GPIO,无法作为UART1_TX使用。
2. 复用模式配置:PA9用 GPIO_Mode_AF_PP (复用推挽输出),表示引脚控制权交给UART1外设,而非CPU直接控制;PA10用 GPIO_Mode_IN_FLOATING (浮空输入),适配串口接收场景。
3. 外设与引脚对应:STM32的复用功能有固定引脚映射(如UART1_TX默认对应PA9),可在参考手册的「Alternate function mapping」章节查询。
更多推荐



所有评论(0)