STM32 HAL库学习系列第2篇 GPIO配置

这篇博客主要介绍了STM32 HAL库中GPIO配置的相关知识,包括几个关键的库函数,是STM32 HAL库学习系列的第二篇。通过学习,读者可以掌握如何使用这些函数来操作GPIO。

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

GPIO 库函数

基本就是使用以下几个函数

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

 

 

 

微信搜索“炫色Allen” 或者扫描下面二维码、关注,获取更多干货!

### STM32 HAL GPIO 初始化与设置 #### 使用 `HAL_GPIO_Init` 函数完成 GPIO 配置STM32HAL 中,GPIO 的初始化通过调用函数 `void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)` 来实现[^1]。此函数接收两个参数:第一个是指向指定端口寄存器的指针(如 `GPIOA`, `GPIOB`),第二个是一个结构体变量,用于定义引脚的具体属性。 以下是该函数的主要功能分解: - **GPIOx 参数**:表示要操作的 GPIO 端口号,例如 `GPIOA` 或者 `GPIOF`。 - **GPIO_Init 结构体**:包含多个成员变量来描述引脚的功能模式、速度、上下拉状态以及初始电平等特性。 具体来说,在实际应用前需先创建并填充一个 `GPIO_InitTypeDef` 类型的对象实例,设定好所需的配置项之后再传递给上述方法即可完成硬件资源分配工作。 #### 外部中断及相关函数说明 除了基本输入输出外,STM32 还支持利用 GPIO 实现外部事件触发机制——即所谓的“外部中断”。为了简化开发流程,官方提供了丰富的 API 接口供开发者调用[^2]。其中几个常用的方法如下所示: - **注册回调处理程序** ```c void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin); ``` - **使能/失能特定线路上的 EXTI 中断请求源** ```c void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); void HAL_NVIC_DisableIRQ(IRQn_Type IRQn); ``` 这些工具可以帮助我们轻松构建响应迅速的应用场景比如按键检测或者传感器数据采集等等。 #### 编写闪烁 LED 的代码示例 下面展示了一段基于前面提到理论知识编写的简单例子用来控制连接到 PF9 上的一个发光二极管按照一定频率交替亮灭[^3]: ```c #include "stm32f4xx_hal.h" // 定义延时函数 static inline void delay(volatile uint32_t count){ while(count--); } int main(void){ // 初始化系统时钟等相关组件... __HAL_RCC_GPIOF_CLK_ENABLE(); GPIO_InitTypeDef ledPinConfig; ledPinConfig.Pin = GPIO_PIN_9; ledPinConfig.Mode = GPIO_MODE_OUTPUT_PP; ledPinConfig.Pull = GPIO_NOPULL; ledPinConfig.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOF,&ledPinConfig); volatile uint32_t time=0; while (true) { /* Step One */ HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, SET); /* Step Two */ delay(5000 -time ); /*Step Three*/ HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9 ,RESET ); /*Final step Four*/ delay(time ); if(++time >=5000 ) time=0 ; } } ``` 以上就是关于如何运用 STM32 HAL 来进行通用目的 I/O 操作的一些介绍啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeAllen嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值