STM32F413库函数GPIO配置

GPIO端口模式包括输入、输出、复用和模拟输入,输出模式有推挽和开漏,输入模式可设置为无上拉/下拉、上拉或下拉。端口速度分为低、中、快、高速,对应不同频率,用户可按需求配置以优化功耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mode(模式设置):

typedef enum
{ 
  GPIO_Mode_IN   = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT  = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF   = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN   = 0x03  /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;

GPIO的端口模式共有四种:输入模式(Input)、输出模式(Output)、复用模式(Alternate function)、模拟输入模式(Analog);

OType(输出模式):

typedef enum
{ 
  GPIO_OType_PP = 0x00,
  GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;

GPIO的输出模式共有两种:推挽输出(PP)和开漏输出(OD) 

PuPd(输入模式):

typedef enum
{ 
  GPIO_PuPd_NOPULL = 0x00,
  GPIO_PuPd_UP     = 0x01,
  GPIO_PuPd_DOWN   = 0x02
}GPIOPuPd_TypeDef;

输入模式:NoPULL(浮空)电压即不为0(低电平,也不为3.3V(高电平),约在1V左右。

                  UP(上拉)电压为3.3V(高电平)

                  DOWN(下拉)电压为0V(低电平)

Speed(端口速度)

typedef enum
{ 
  GPIO_Low_Speed     = 0x00, /*!< Low speed    */
  GPIO_Medium_Speed  = 0x01, /*!< Medium speed */
  GPIO_Fast_Speed    = 0x02, /*!< Fast speed   */
  GPIO_High_Speed    = 0x03  /*!< High speed   */
}GPIOSpeed_TypeDef;

GPIO端口速度有四种:低速、中速、快速、超快速。

用户可根据不同需要配置端口速度,以节省功耗。

#define  GPIO_Speed_2MHz    GPIO_Low_Speed    
#define  GPIO_Speed_25MHz   GPIO_Medium_Speed 
#define  GPIO_Speed_50MHz   GPIO_Fast_Speed 
#define  GPIO_Speed_100MHz  GPIO_High_Speed  

值得注意的是:low、medium、fast、high分别被宏定义为2M、25M、50M、100M。调用端口速度结构体 GPIO_Speed_Typedef时,应当用上述表示法。

 

 

 

 

### STM32F07 HAL 库 GPIO 中断配置库函数用法 在 STM32F07 的 HAL 库中,GPIO 中断的配置涉及多个步骤,主要包括时钟使能、GPIO 初始化、中断线配置以及 NVIC 配置等内容。以下是详细的说明: #### 1. **时钟使能** 为了使用 GPIO 及其关联的功能模块,必须首先开启对应的时钟。这通常通过 `__HAL_RCC_GPIOX_CLK_ENABLE()` 完成[^1]。 ```c void MX_GPIO_Init(void) { /* 启用 GPIOA 和 GPIOB 的时钟 */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); } ``` #### 2. **GPIO 初始化** 对于中断功能,需要将 GPIO 设置为输入模式,并启用上拉或下拉电阻(视具体需求而定)。可以通过 `HAL_GPIO_Init` 函数完成此操作。 ```c GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置 PA0 作为外部中断源 */ GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发中断 GPIO_InitStruct.Pull = GPIO_PULLDOWN; // 下拉电阻 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ``` 上述代码片段展示了如何设置 GPIOA 的第 0 引脚为上升沿触发的中断输入模式[^2]。 #### 3. **中断线配置** STM32 使用 EXTI(External Interrupt/Event lines)来处理外部中断请求。每个 GPIO 引脚都映射到特定的 EXTI 线路。EXTI 线路由 `HAL_NVIC_SetPriority` 和 `HAL_NVIC_EnableIRQ` 进行配置。 ```c /* 配置 EXTI Line 0 (对应 PA0) */ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 设置优先级 HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 使能中断 ``` #### 4. **编写中断服务程序** 最后一步是编写并注册中断服务程序(ISR),以便当指定事件发生时执行相应的逻辑。 ```c void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // 调用 HAL 层的中断处理器 } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0) { // 处理 PA0 的中断事件 printf("PA0 发生了中断\n"); } } ``` 以上代码实现了对 PA0 引发的中断事件的具体响应逻辑[^3]。 --- ### 注意事项 - 在实际应用中,需确保所使用的 GPIO 引脚支持中断功能。 - 如果项目中有多个中断源,则需要注意优先级分配以避免冲突。 - 对于不同的触发条件(如下降沿、双沿等),可通过修改 `GPIO_InitStruct.Mode` 参数实现。 --- ### 示例总结 完整的 GPIO 中断初始化过程如下所示: ```c #include "stm32f0xx_hal.h" void SystemClock_Config(void); int main(void) { HAL_Init(); // 初始化 HAL 库 SystemClock_Config(); // 配置系统时钟 MX_GPIO_Init(); // 初始化 GPIO while (1) {} } void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); } void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0) { printf("PA0 发生了中断\n"); } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值