GPIO几种配置的作用

STM32 IO 配置详解及代码例子
IO 口模式:
GPIO_Mode_AIN = 0x0, 模拟输入
GPIO_Mode_IN_FLOATING = 0x04, 浮空输入
GPIO_Mode_IPD = 0x28, 带下拉输入
GPIO_Mode_IPU = 0x48, 带上拉输入
GPIO_Mode_Out_OD = 0x14, 表示配置相应管脚为 GPIO 开漏输出(真双向 IO)
GPIO_Mode_Out_PP = 0x10, 通用推挽输出模式
GPIO_Mode_AF_OD = 0x1C, 表示配置相应管脚为复用功能的开漏输出
GPIO_Mode_AF_PP = 0x18 复用功能的推挽输出模式
推挽输出:可以输出高,低电平,连接数字器件;推挽结构一般是指两个三极管分别受两互补信号的控制,总
是在一个三极管导通的时候另一个截止.
开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,
其吸收电流的能力相对强(一般 20ma 以内).
要实现 线与 需要用 OC(open collector)门电路.是两个参数相同的三极管或 MOSFET,以推挽方式存在于电
路中,
各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,
效率高。输出既可以向负载灌电流,也可以从负载抽取电流。
//--------------------------------------------------------------------------
但用作纯粹的输出时,可以选用 GPIO_Mode_Out_PP,但是有些硬件上有要求用开发射极的结构就要 用
GPIO_Mode_Out_OD 。
如果既要用于输出,又要接收信号作输入,无需改变该 pin 的工作模式,只需设定为输入浮点状 态
GPIO_Mode_IN_FLOATING ,但是读的时候读输入寄存器(GPIOE->IDR)的值。输出值照样设定,不过输出 pin
脚可能要硬件上 上拉。
/******************************************************************************** Function Name : GPIO_Configuration 通用输入输出口配置
* Description : Configures the different GPIO ports.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ---------------------------------GPIOA 配置--------------------------------*/
// PA09:10 =Tx:Rx 串口 0 收发接口
/* Configure USART1 Tx (PA.09) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA.10) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);/* ---------------------------------GPIOB 配置--------------------------------*/
/* ---------------------------------GPIOC 配置--------------------------------*/
//PC4,5,6,7 =LED1,2,3,4 接口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
// PC0 =ADC-Channel10 模拟输入(接开发板上滑动变阻器)
/* Configure PC.00 (ADC Channel10) as analog input -------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PC.00 为 ADC Channel10 模拟输入(接滑动变阻器)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* ---------------------------------GPIOD 配置--------------------------------*/
// PD11~15; PD3:4 =KEY4-DOWN,UP,LEFT,RIGHT,SEL; KEY2:3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_11 | GPIO_Pin_12 |
GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);/* ---------------------------------GPIOE 配置--------------------------------*/
}
### STM32 GPIO 的工作模式 STM32 微控制器中的 GPIO 支持多种工作模式,这些模式可以通过配置寄存器来设置不同的输入/输出行为。以下是常见的 GPIO 工作模式及其特点: #### 1. 输入模式 (Input Mode) - **浮空输入 (GPIO_Mode_IN)** 此模式下,引脚不带任何内部上下拉电阻,适合连接外部驱动信号[^3]。 - **带上拉的输入 (GPIO_PuPd_UP)** 配置此模式时,GPIO 引脚通过内部上拉电阻连接到电源电压 VDD[^4]。 - **带下拉的输入 (GPIO_PuPd_DOWN)** 在该模式下,GPIO 引脚通过内部下拉电阻接地 GND。 #### 2. 输出模式 (Output Mode) - **推挽输出 (GPIO_Mode_AF_PP / GPIO_Mode_Out_PP)** 推挽输出利用 P-MOS 和 N-MOS 管组合提供高电平和低电平输出能力,适用于大多数通用输出场景。 - **开漏输出 (GPIO_Mode_AF_OD / GPIO_Mode_Out_OD)** 开漏输出仅能主动拉低电平,通常需要外接上拉电阻才能实现完整的高低电平切换,常用于 I²C 或其他总线通信协议。 #### 3. 复用功能模式 (Alternate Function Mode) - **复用推挽输出 (GPIO_Mode_AF_PP)** 当 GPIO配置为复用功能时,可以启用特定外设的功能接口(如 USART、SPI、I²C),并采用推挽方式输出信号[^2]。 - **复用开漏输出 (GPIO_Mode_AF_OD)** 类似于普通的开漏输出,但在复用功能中使用,常见于某些特殊外设需求。 #### 4. 模拟模式 (Analog Mode) - **模拟输入 (GPIO_Mode_AN)** 将 GPIO 设置为模拟输入模式,允许 ADC 对其采样测量电压值,此时不会应用数字逻辑处理。 --- ### 寄存器操作说明 为了实现上述各种模式,STM32 提供了一系列控制寄存器: - **ODR (Output Data Register)**: 控制输出数据的状态,写入 `0` 表示低电平,写入 `1` 表示高电平。 - **IDR (Input Data Register)**: 反映当前引脚的实际电平状态,可用于检测输入信号变化。 - **BSRR/BRR**: 实现快速翻转或清除指定引脚的电平状态。 --- ### 示例代码 以下是一个简单的初始化代码片段,展示如何配置 GPIO 为不同模式: ```c // 初始化 GPIO 为推挽输出模式 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; // 浮空 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 切换 LED 状态 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值