基于HAL库的GPIO端口三个基础函数HAL_GPIO_Init()、HAL_GPIO_ReadPin()和HAL_GPIO_WritePin()

这篇具有很好参考价值的文章主要介绍了基于HAL库的GPIO端口三个基础函数HAL_GPIO_Init()、HAL_GPIO_ReadPin()和HAL_GPIO_WritePin()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HAL_GPIO_Init():初始化GPIO引脚函数

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():读取GPIO引脚的状态

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_PIN_RESET:引脚为低电平。
  • GPIO_PIN_SET:引脚为高电平。

函数作用:
读取指定GPIO端口和引脚号的电平状态。

HAL_GPIO_ReadPin()代码示例

/* 以读取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():设置GPIO引脚的状态

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_RESETGPIO_PIN_SET

函数作用:
该函数用于控制 GPIO 端口对应引脚的输出状态,将引脚输出电平设置为 PinState。

函数实现原理:
该函数的实现原理比较简单,它通过设置相应的寄存器来改变 GPIO 端口的输出状态。具体实现步骤如下:

读取 GPIO 端口的输出状态寄存器(ODR)的值;
根据 PinState 参数设置相应的 GPIO 引脚的状态;
将更新后的状态值写入 ODR 寄存器中。

HAL_GPIO_WritePin()示例代码:

下面是一个简单的示例代码,演示如何使用 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灯不断地闪烁。

结束

如果对你有帮助,点赞支持一下吧。
转载联系作者。文章来源地址https://www.toymoban.com/news/detail-422568.html

到了这里,关于基于HAL库的GPIO端口三个基础函数HAL_GPIO_Init()、HAL_GPIO_ReadPin()和HAL_GPIO_WritePin()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 hal库 GPIO初始化函数MX_GPIO_Init()梳理分析、初步细致学习(二)

    目录 一、GPIO外设时钟初始化 二、配置GPIO 2.1 配置 GPIO_InitTypeDef结构体成员变量  2.2 把参数写到对应寄存器 2.2.1 io口的配置 2.2.2 外部中断的配置 三、相关知识分析 3.1 hal_gpio其他函数简单分析 3.1.1 HAL_GPIO_DeInit(); 3.1.2  HAL_GPIO_ReadPin(); 3.1.3  HAL_GPIO_WritePin(); 3.1.4  HAL_GPIO_Togg

    2024年02月04日
    浏览(42)
  • 基于HAL库的串口通信

    首先对STM32MX进行配置,先开启外部时钟。 配置时钟,具体多少M可以按自己喜欢配置(可以直接配置HCLK回车就行,没有标红就说明可以);  开启USART,波特率,IO口啥的默认就行也可以自己修改;  很重要一点,一定要开启接收中断,不然不能接收,我这里把DMA中断也开了

    2024年02月07日
    浏览(22)
  • 【STM32】基于HAL库的中断详细学习

    1.中断概述 1.1中断相关概念 1.2 STM32中断系统 2 .HAL库的中断处理 2.1 HAL 库的中断封装 2.2 外部中断处理流程 3.外部中断的HAL库定义 3.1. 外部中断的数据类型 3.2. 外部中断的接口函数 在计算机系统中,处理器常常需要与外部设备进行数据传输。常见的数据传输方式有以下四种:

    2024年02月02日
    浏览(72)
  • 嵌入式-Stm32-江科大基于标准库的GPIO的八种模式

    (推荐先看文章:《 嵌入式-32单片机-GPIO推挽输出和开漏输出》) 下文图都是从参考手册借阅:STM32F10xxx(中文),大概页数是110/775左右 GPIO (General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V(有FT标识) 输出模式 下可控

    2024年01月20日
    浏览(35)
  • 嵌入式-Stm32-江科大基于标准库的GPIO通用输入输出口

    (推荐先看文章:《 嵌入式-32单片机-GPIO推挽输出和开漏输出》) 下文图都是从参考手册借阅:STM32F10xxx(中文),大概页数是110/775左右 GPIO (General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V(有FT标识) 输出模式 下可控

    2024年01月17日
    浏览(42)
  • 基于stm32+HAL库的ADC电压采集实验

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 只会用if的大神提醒您,敌军还有30秒到达战场,碾碎他们!白银局不要怕! 软件:keil5、stm32cubemx、串口调试助手 硬件:stm32f103系列的开发板、杜邦线*1、串口工具 仅此而已!!!正好6神 1、打开cube

    2023年04月15日
    浏览(28)
  • 嵌入式-Stm32-江科大基于标准库的GPIO4个小实验

    核心:本文共4个小实验: 第一个:LED灯闪烁 第二个:LED流水灯 第三个:按键控制LED 第四个:光敏传感器控制蜂鸣器 1.1 LED、蜂鸣器、面包板 LED:发光二极管,正向通电点亮,反向通电不亮。 有源蜂鸣器(本实验):内部自带振荡源,将正负极接上直流电压即可持续发声,频

    2024年01月21日
    浏览(49)
  • STM32基于hal库的智能小车—红外寻迹

    材料: (1)stm32f407zgt6最小系统开发板 (2)l298n电机驱动模块1个 (3)四个电机 (4)循迹红外模块3个 一、组装 (1)L298N电机驱动模块与stm32开发板接线如下图: 说明:PWM接线把跳线帽扒开接外面引脚 CH1接ENA,CH2接ENB。 (2)寻迹红外接线: 二、主要程序 1、STM32CUBEMX配置如下:

    2024年02月01日
    浏览(35)
  • STM32:基于HAL 库的外部中断按键以及消抖

    第一次写博客,有错误与问题欢迎指正。 这部分直接上代码,假设PB5为输入端且上拉,PB11为输出。 在CubeMx中配置完引脚(下降沿触发)并在NVIC中开启外部中断后,我们注意到,上一个程序有5个要素(我写了注释的5个): 中断回调函数HAL_GPIO_EXTI_Callback是一个虚函数,我们

    2024年04月10日
    浏览(35)
  • STM32基于HAL库的串口接受中断和空闲中断

    在通信方面。UART由于全双工通信,可以同时接受数据和发送数据而被广泛使用。 而接受数据则又有很多种方法 比如: 1根据结束符判断,数据是字符串形式,所以一般串口接受的接受符就是 \\\"rn\\\"  换成16进制ascil码显示就是 0X0D   0X0A (对应rn)  2定时器中断,设计\\\"喂狗信号量

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包