赞
踩
HAL_GPIO_Init()
是 STMicroelectronics 为其 STM32 微控制器系列提供的 HAL(硬件抽象层)库中的一个函数。
HAL_GPIO_Init()
函数的目的是初始化 STM32 微控制器的 GPIO(通用输入/输出)引脚。 GPIO 引脚可配置为输入或输出引脚,并可用于连接各种组件,如传感器、显示器和其他设备。
HAL_GPIO_Init()
函数将要初始化的 GPIO 引脚以及各种配置参数作为输入,例如引脚模式(输入、输出、复用功能)、输出类型(推挽或开漏)、输出速度、 和上拉/下拉电阻。
这个函数我在其他文章中也写道了,具体参考这个文章:
https://blog.csdn.net/qq_52749711/article/details/129559234
HAL_GPIO_ReadPin() 是STM32 HAL库中用于读取GPIO引脚电平状态的函数。下面是该函数的详细说明和带中文注释的代码示例:
函数原型:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
参数说明:
GPIOx
:GPIO端口号,例如 GPIOA、GPIOB、GPIOC 等。
GPIO_Pin
:GPIO引脚号,可以是单独的引脚号,例如 GPIO_PIN_0,也可以是多个引脚的按位或组合,例如 GPIO_PIN_0 | GPIO_PIN_1。
返回值说明:
函数作用:
读取指定GPIO端口和引脚号的电平状态。
/* 以读取GPIOA的第0个引脚状态为例 */
/* 如果该引脚为高电平,则点亮LED灯,否则熄灭LED灯 */
#include "stm32f4xx_hal.h"
#define LED_PIN GPIO_PIN_5
#define LED_PORT GPIOA
int main(void)
{
HAL_Init();
/* 使能GPIOA时钟 */
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct;
/* 配置GPIOA第0个引脚为输入引脚 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; //设置为输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 内部上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* 配置GPIOA第5个引脚为输出引脚 */
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);
while (1)
{
/* 读取GPIOA的第0个引脚状态 */
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)
{
/* 如果引脚为高电平,则点亮LED灯 */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);
}
else
{
/* 如果引脚为低电平,则熄灭LED灯 */
HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);
}
}
}
上面代码初始化了俩个GPIO一个用做输出控制LED小灯,一个用作输入等待信号。while循环中不断读取GPIO_PIN_0管脚的数据,如果为高电平则将LED灯点亮,否则熄灭LED灯。
HAL_GPIO_WritePin()
是一个由 STMicroelectronics 提供的函数,用于控制 GPIO 端口的输出状态。下面是该函数的详细说明:
函数原型:
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
GPIOx
:GPIO 端口号,例如 GPIOA、GPIOB 等;
GPIO_Pin
:GPIO 端口对应的引脚编号,例如 GPIO_PIN_0、GPIO_PIN_1 等;
PinState
:GPIO 端口输出的状态,可以是 GPIO_PIN_RESET
或 GPIO_PIN_SET
。
函数作用:
该函数用于控制 GPIO 端口对应引脚的输出状态,将引脚输出电平设置为 PinState。
函数实现原理:
该函数的实现原理比较简单,它通过设置相应的寄存器来改变 GPIO 端口的输出状态。具体实现步骤如下:读取 GPIO 端口的输出状态寄存器(ODR)的值;
根据 PinState 参数设置相应的 GPIO 引脚的状态;
将更新后的状态值写入 ODR 寄存器中。
下面是一个简单的示例代码,演示如何使用 HAL_GPIO_WritePin()
函数来控制 LED 灯的闪烁。
#include "stm32f4xx_hal.h"
int main(void)
{
// 初始化GPIO引脚
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE(); // 打开GPIOA时钟
GPIO_InitStruct.Pin = GPIO_PIN_5; // 设置GPIO引脚5
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 设置GPIO速度为低速
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 将引脚5设置为高电平
HAL_Delay(500); // 延时500ms
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 将引脚5设置为低电平
HAL_Delay(500); // 延时500ms
}
}
在这个示例程序中,首先我们使用GPIO_InitTypeDef
结构体来初始化GPIO引脚。然后在无限循环中,我们使用HAL_GPIO_WritePin()
函数来控制LED灯的闪烁,将GPIO引脚5设置为高电平,然后延时500ms,接着将GPIO引脚5设置为低电平,再次延时500ms。循环不断重复这个过程,从而使LED灯不断地闪烁。
如果对你有帮助,点赞支持一下吧。
转载联系作者。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。