关于stm32的GPIO复用

本文介绍STM32微控制器中GPIO引脚的复用配置方法及其应用场景,包括普通输入输出、模拟输入及内置外设功能配置等,并提供具体实例。
STM32复用的GPIO引脚配置方式
STM32所有内置外设的外部引脚都是与标准GPIO引脚复用的,例如对于STM32F103VBT6,47引脚为PB10,它的复用功能是I2C2_SCL和USART3_TX,表示在上电之后它的默认功能为PB10,而I2C2的SCL和USART3的TX为它的复用功能;另外在TIM2的引脚重映射后,TIM2_CH3也成为这个引脚的复用功能。STM32基本上每个引脚都有8种配置模式:1)浮空输入2)带弱上拉输入3)带弱下拉输入4)模拟输入5)推挽输出6)开漏输出7)复用推挽输出8)复用开漏输出通常有5种方式使用某个引脚功能,它们的配置方式如下:1)作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。2)作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。3)作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。4)作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。5)作为内置外设的输出:根据需要配置该引脚为复用推挽输出或复用开漏输出,同时使能该引脚对应的所有复用功能模块。注意如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。--------------------------------------------------------------------------------比如要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。如果要使用STM32F103VBT6的47脚作为TIM2_CH3,则需要对TIM2进行重映射,然后再按复用功能的方式配置对应引脚。
### STM32 GPIO 复用配置方法 STM32 单片机的 GPIO 引脚不仅可以作为普通的输入或输出引脚使用,还可以通过复用功能来执行其他外设的功能。这种灵活性使得开发者可以根据具体的应用场景灵活调整硬件资源。 #### 配置过程概述 为了使某个 GPIO 引脚进入复用状态,通常需要完成以下几个方面的设置: - **端口重映射**:某些特定的外设可能需要重新映射到不同的物理位置; - **模式选择**:将目标引脚设定为复用功能模式; - **上下拉电阻配置**:根据实际需求决定是否启用内部上拉或下拉电阻; - **初始化外设**:确保所选外设已经正确初始化并准备好工作[^4]。 #### 实际操作指南 下面给出一段简单的 C 语言代码片段,展示如何在一个基于 HAL 库的项目中配置 PA9 和 PA10 这两个引脚用于 USART1 的 TXD 和 RXD 功能: ```c // 初始化结构体定义 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 开启时钟访问权限 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE(); // 设置PA9 (USART1_TX)为复用推挽输出, 并开启高速度 GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // AF: Alternate Function 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不接上下拉电阻 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 设置PA10 (USART1_RX)为复用浮空输入 GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 浮空输入 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ``` 这段代码展示了如何利用 `GPIO_InitStruct` 结构体成员变量来进行具体的参数赋值,并调用了 `HAL_GPIO_Init()` 函数完成了最终的初始化动作[^3]。 需要注意的是,在进行上述配置之前,应该确认相关外设(本例中即 UART)也已经被适当初始化过了。此外,如果涉及到更复杂的外设,则还需要进一步查阅官方文档获取更多细节信息[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值