hal库学习笔记(二):GPIO

这篇具有很好参考价值的文章主要介绍了hal库学习笔记(二):GPIO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

硬件知识

一、LED

二、按键

函数库知识

一、例程解析

二、函数解析

代码编写

一、小灯闪烁

二、按键开关灯

硬件知识

一、LED知识

①原理

hal_gpio_togglepin,32学习笔记,嵌入式硬件

 LED:当阳极电平>阴极电平时,LED导通发光

 在图中:LED阴极接地,则

  • A1为高电平时,小灯发光
  • A1为低电平时,小灯不发光

②初始化设置

选择A1为输出模式hal_gpio_togglepin,32学习笔记,嵌入式硬件

 通过左边的设置界面找到GPIO,然后设置参数

hal_gpio_togglepin,32学习笔记,嵌入式硬件

有关参数如下hal_gpio_togglepin,32学习笔记,嵌入式硬件

  • output level:输出电平
    • low:开机后为低电平
    • High:开机后为高电平

hal_gpio_togglepin,32学习笔记,嵌入式硬件

 剩余三个都这样调,以后都是这样、

暂不做要求,记住就好

二、按键知识

①原理

hal_gpio_togglepin,32学习笔记,嵌入式硬件

当按键按下后,两端导通

在图中,按键接地

按下后相当于B0接地,会变成低电平

若接3.3v正极,按下后变为高电平

②初始化设置

B0选Input

hal_gpio_togglepin,32学习笔记,嵌入式硬件

 参数设置hal_gpio_togglepin,32学习笔记,嵌入式硬件

选择pull-up上拉,上拉就是往电平往上拉

代表B0平时为高电平

函数库知识

一、例程解析

①例程描述

按这个路径慢慢找就好hal_gpio_togglepin,32学习笔记,嵌入式硬件

先点开这个readme看看hal_gpio_togglepin,32学习笔记,嵌入式硬件

找到最重要的Example Description

@par Example Description	//例程描述	

How to configure and use GPIOs through the HAL API.

PA.05 IO (configured in output pushpull mode) toggles in a forever loop.
On STM32F103RB-Nucleo board this IO is connected to LED2.

In this example, HCLK is configured at 64 MHz.

Toggle:翻转

API:可以理解为函数集

stm32……:官方的板子,我们用的是stm32f103c8t6最小系统板

HCLK:不知道是什么,当做系统运行频率吧

大意翻译:怎么配置和使用GPIO,通过HAL里的函数

A5调好了输出模式,会在死循环内不停翻转电平

在官方板子里这个IO口连接LED2

这里,HCLK的频率为64MHZ

很明显,这个例程的现象就是A5连着的灯亮个不停

②主函数

点开main函数,看看写了啥hal_gpio_togglepin,32学习笔记,嵌入式硬件

 这是主函数里面一堆初始化,无视就好

死循环里的才是重点

   HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    /* Insert delay 100 ms */
    HAL_Delay(100)
  •  首先看这个短小精悍的    HAL_Delay(100);
    • 上面说了delay100ms
    • 很明显括号里是多少,他就延时多少毫秒,记住就好
  • 然后就是HAL_GPIO_TogglePin(LED2_GPIO_PORT, LED2_PIN);
    • 意思就是LED2电平翻转

二、函数库讲解

右键跳转一下定义

hal_gpio_togglepin,32学习笔记,嵌入式硬件

 可以看到这样一个库hal_gpio_togglepin,32学习笔记,嵌入式硬件

接下来讲解里面重要的函数

  • void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    • 刚刚说的已经很清楚了,翻转电平
    • 参数设置
      • GPIO_TypeDef *GPIOx:端口,如GPIOA,GPIOB等
      • uint16_t GPIO_Pin:引脚,如GPIO_PIN_1,GPIO_PIN_13等
    • 例:HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
      • 翻转一次A1的电平
  • void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
    • 上面是翻转这边是写入
    • 参数:
      • GPIO & GPIO_Pin:同上
      • GPIO_PinState:引脚状态,是官方采用枚举列举的
      • typedef enum
        {
          GPIO_PIN_RESET = 0u,              //低电平
          GPIO_PIN_SET                            //高电平
        } GPIO_PinState;
    • 例:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,GPIO_PIN_RESET );

      • A1写入低电平

  • GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
    • 读取引脚,返回引脚状态,如低电平或高电平
    • 其他参数同上
    • 例:if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) ==GPIO_PIN_RESET ){……}
      • 如果A1为低电平,就……

代码编写

一、小灯闪烁

①初始化

复制模板改名hal_gpio_togglepin,32学习笔记,嵌入式硬件

然后按上面说的那样子,配好A1

hal_gpio_togglepin,32学习笔记,嵌入式硬件

这里我顺手配了B0,问题不大

②在主文件死循环里加个和例程差不多的

像这样快速定位要引用的函数

hal_gpio_togglepin,32学习笔记,嵌入式硬件

复制到死循环内

		HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
		HAL_Delay(500);

 然后下载

实验现象:A1红灯每500ms亮灭一次

二、按键开关小灯

①初始化hal_gpio_togglepin,32学习笔记,嵌入式硬件

②代码编写

刚刚说了按键原理,那么基本思路就是

if(按键按下){翻转A1电平},代码如下

		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) ==GPIO_PIN_RESET){
			
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
			
		}

简单如斯

但实际上,按键和手都可以是劣质的

你按下后B0不一定为低电平,你偶尔按了没反应

所以我们一般在外面加个延时

		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) ==GPIO_PIN_RESET){
			HAL_Delay(20);
			
			if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) ==GPIO_PIN_RESET){
				
				HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
				
			}
		}

其实加完也没稳定太多,图个心理安慰

补充:专属库的改进

官方代码太长了不想复制那么多,我一般这样改文章来源地址https://www.toymoban.com/news/detail-803676.html

/*Mine.h*/

#include "main.h"




#define Red 				GPIO_PIN_1
#define Green 				GPIO_PIN_5


#define Key1					GPIO_PIN_0
#define Key2	 				GPIO_PIN_1
#define Key3					GPIO_PIN_10
#define Key4	 				GPIO_PIN_11


#define Pressed 								GPIO_PIN_RESET


#define Red_On() 			HAL_GPIO_Writein(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
#define Red_Off() 		HAL_GPIO_Writein(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
#define Red_Toggle() 	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);


GPIO_PinState ReadPin(uint16_t GPIO_Pin) ;




/*Mine.c*/

#include "Mine.h"


GPIO_PinState ReadPin(uint16_t GPIO_Pin) {



		return HAL_GPIO_ReadPin(GPIOB,  GPIO_Pin);

}







/* Mine.h*/


/* USER CODE BEGIN Includes */
#include "Mine.h"
/* USER CODE END Includes */

		
if(ReadPin(GPIO_PIN_0) == Pressed){
			HAL_Delay(20);
			
			if(ReadPin(GPIO_PIN_0) == Pressed){
				
				Red_Toggle();
				
			}
		}

到了这里,关于hal库学习笔记(二):GPIO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

    HAL_GPIO_Init() 是 STMicroelectronics 为其 STM32 微控制器系列提供的 HAL(硬件抽象层)库中的一个函数。 HAL_GPIO_Init() 函数的目的是初始化 STM32 微控制器的 GPIO(通用输入/输出)引脚。 GPIO 引脚可配置为输入或输出引脚,并可用于连接各种组件,如传感器、显示器和其他设备。 HAL

    2023年04月23日
    浏览(23)
  • STM32 GPIO设置(GPIO初始化)学习笔记

    GPIO 都知道是 通用输入输出接口 的意思就不详细解释 那么我们就直接进入怎么设置GPIO接口: 这里我的编译软件是keil5,相信大家都应该知道stm32有各种的工作模式上拉、下拉、推挽、开漏等等。如果想要了解具体的工作模式原理这里我推荐大家看:推挽 开漏 高阻 这都是谁

    2024年03月28日
    浏览(55)
  • 【学习笔记:GPIO驱动开发】

    快门驱动芯片ms8837 输入信号是两个GPIO,最开始是在camera 驱动中调用 gpio_request() 申请GPIO,当 open/close camera 的时候就可以调用 gpio_direction_output() 来控制快门的开、关。 在dts 中加入引脚配置: 在camera 驱动中调用gpio_request() 去控制GPIO: 这样在open/close camera 的时间是可以正常调

    2024年02月03日
    浏览(41)
  • STM32外设GPIO(学习笔记)

    在编写stm32程序时,对寄存器进行操着需要知道每个外设的基地址,标准库的stm32f10x.h文件里也有各种外设的基地址。 比如GPIO:在定义输出数据寄存器地址GPIOA_ODR_Addr时,在GPIOA_BASE(GPIO端口A的基址地址)地址基础上偏移 在stm32f10x.h文件里面有定义GPIOA_BASE,是APB2PERIPH_BASE(

    2024年04月12日
    浏览(40)
  • stm32 学习笔记:GPIO输出

           引脚电平 0-3.3V,部分可容忍5V,对输出而言最大只能输出3.3V,        只要可以用高低电平来控制的地方,都可以用GPIO来完成,如果控制的功率比较大的设备,只需加入驱动电路即可         GPIO 通用输入输出口,可配置为 8种 输入输出模式。 输出模式下可控制端口

    2024年02月09日
    浏览(51)
  • MSP432库函数学习笔记-GPIO

    简述MSP432Pxx-GPIO库的各函数 1,GPIO模式设置,PxDIR寄存器 2,GPIO复用功能配置,PxSEL寄存器 3,GPIO输出电平设置,PxOUT寄存器 4,GPIO输入模式下上/下拉电阻选择,PxREN寄存器 5,GPIO输入读取模式设置,PxIN寄存器 6,GPIO中断模块设置 1,中断使能寄存器PxIE 2,获取选择I/O口上的中

    2024年02月16日
    浏览(58)
  • 按键输入实验--GPIO做输入-学习笔记

    按键输入实验 1.首先,按键实验是GPIO口的另一应用,上一次的跑马灯实验是将GPIO口作为输出,此次按键实验是将GPIO口作为输入。 2.GPIO作为输入时和输入的不同: (1)首先,上拉电阻是为了保证在没有信号输入的时候,IO口保持高电平,若按键为低电平有效,则没有信号的

    2024年02月09日
    浏览(43)
  • MSP432学习笔记2——GPIO输入输出

    今日继续更新我的MSP432速通笔记 新的硬件芯片到手,脑子是空白的,板子是漆黑的,诺想要缓解这份尴尬,便来点灯吧! 今日主要速通MSP432的GPIO输入输出功能,目标是连接矩阵键盘与LED流水灯模块 到MSP432P401R开发板上进行练习。 文章 附上原理图与代码 目录 ​编辑 基础知

    2024年02月16日
    浏览(39)
  • HI3861学习笔记(12)——GPIO输入接口使用

    HI3861V100 芯片有 15 个 GPIO,引脚分布如下: 以下 GPIO 接口位于 baseiot_hardwareinterfaceskitswifiiot_litewifiiot_gpio.h 。 业务BUILD.gn中包含路径 功能 初始化GPIO外设 函数定义 unsigned int GpioInit(void) 参数 无 返回 错误码 功能 设置GPIO输出方向 函数定义 unsigned int GpioSetDir(WifiIotGpioIdx id,

    2024年02月09日
    浏览(39)
  • 【STM32】STM32学习笔记-GPIO输出(05)

    GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电

    2024年03月15日
    浏览(81)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包