STM32复用的GPIO引脚配置方式

本文深入解析了STM32所有内置外设的外部引脚配置,包括复用功能、配置模式和使用实例,详细指导如何在不同场景下灵活运用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进行重映射,然后再按复用功能的方式配置对应引脚。



转自: http://blog.ednchina.com/STM32/246157/message.aspx

STM32F4 GPIO引脚配置成串口可按以下步骤进行: ### 1. 使能相关时钟 需要使能GPIO端口时钟和串口时钟。以使用GPIOF和串口1为例,使能GPIOF时钟时,GPIOF对应在AHB1ENR寄存器的第5位,可通过以下方式操作: ```c RCC->AHB1ENR |= 1 << 5; // 使能GPIOF时钟 ``` 使能串口1时钟,串口1挂载在APB2总线上,可通过以下代码实现: ```c RCC->APB2ENR |= 1 << 4; // 使能串口1时钟 ``` ### 2. 配置GPIO引脚模式为复用功能 GPIO引脚需要配置复用功能才能作为串口使用。根据引用,STM32中有很多内置外设,这些外设的外部引脚都是和GPIO所共用,这种情况就是gpio复用配置步骤如下: ```c GPIO_InitTypeDef GPIO_InitStructure; // 配置引脚复用功能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 假设使用PF0和PF1作为串口引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // 复用模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 选择合适的速度 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // 上拉模式 GPIO_Init(GPIOF, &GPIO_InitStructure); // 将引脚连接到对应的串口复用功能 GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_USART1); ``` ### 3. 配置串口参数 配置串口的波特率、数据位、停止位、校验位等参数: ```c USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; // 波特率设置为115200 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 数据位为8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 停止位为1位 USART_InitStructure.USART_Parity = USART_Parity_No; // 无校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 收发模式 USART_Init(USART1, &USART_InitStructure); ``` ### 4. 使能串口 ```c USART_Cmd(USART1, ENABLE); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值