1.配置流程

(1)时钟使能
(2)结构体赋值
(3)写入寄存器

2.配置说明

2.1使能 IO 口时钟

调用函数为:
__HAL_RCC_GPIOX_CLK_ENABLE //使能GPIO时钟(其中 X=A~K)

2.2结构体赋值

在HAL库中stm32h7xx_hal_gpio.h文件中,可以看到GPIO_InitTypeDef结构体定义,如下:

typedef struct
{uint32_t Pin; //指定 IO 口uint32_t Mode; //模式设置uint32_t Pull; //上下拉设置uint32_t Speed; //速度设置uint32_t Alternate;//复用映射配置
}GPIO_InitTypeDef;

赋值说明:

(1)pin:指定IO口

如果多个 IO 口,他们都是对应同一个 GPIOx,那么我们可以通过|(或)的方式同时初始化多个 IO 口。这样操作的前提是,他们的 Mode,Speed,Pull 和 Alternate 参数值相同,因为这些参数并不能一次定义多种。例如:

GPIO_Initure.Pin=GPIO_PIN_9| GPIO_PIN_10| GPIO_PIN_11; //PA9,PA10,PA11

(2)Mode:模式设置

同 STM32F1 一样,STM32H7 的 IO 可以由软件配置成如下 8 种模式中的任何一种:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏式复用功能

GPIO_MODE_ANALOG             /*模拟输入,特点:应用ADC模拟输入,或者低功耗下省电*/GPIO_MODE_INPUT            /*浮空输入,特点:浮空输入一般多用于外部按键输入,IO的电平状态是不确定
的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的*/GPIO_PULLDOWN             /*下拉输入,特点:默认低电平*/GPIO_PULLUP             /*上拉输入,特点:默认高电平*/GPIO_Mode_Out_OD          /*开漏输出,特点:IO输出0接GND,IO输出1,悬空;接上拉电阻才可以输出高
电平,上升沿速度慢。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);可以将多个开漏输出的
Pin,连接到一条线上。通过一只上拉电阻,在不增加任何器件的情况下,形成“与逻辑”关系。*/GPIO_Mode_Out_PP          /*推挽输出,特点:可以输出高,低电平,导通损耗小,效率高,读输入值是未
知的*/GPIO_Mode_AF_OD           /*复用开漏输出,特点:可以理解为GPIO口被用作第二功能时的配置情况(即并
非作为通用IO口使用),如:片内外设功能(TX1,MOSI,MISO.SCK.SS)*/GPIO_Mode_AF_PP           /*复用推挽输出,特点:可以理解为GPIO口被用作第二功能时的配置情况(即并
非作为通用IO口使用),如:片内外设功能(I2C的SCL,SDA)*/

(3)Pull:作为输入引脚时指定

(4)Speed:引脚速度

GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。

高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。例如:

① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。

② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。

③ SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。
(5)Alternate:引脚复用映射

①复用功能:内置外设是与I/O口共用引出管脚(不同的功能对应同一管脚)

STM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。

②重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功 能的引出脚位是可通过程序改变到其他的引脚上!

直接好处:PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。

如:USART1: 0: 没有重映像(TX/PA9,RX/PA10); 1: 重映像(TX/PB6,RX/PB7)。

通过参照datasheet上的引脚映射说明,来配置相应复用功能。

3.写入寄存器

在结构体赋值完成后,初始化 IO 参数,调用HAL库中函数将结构体中的值写入到寄存器。

HAL_GPIO_Init(GPIOX,&GPIO_Initure);          //写入寄存器,初始化GPIOX(X=A~K)

举例

void LED_Init(void)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOB_CLK_ENABLE();                    //开启GPIOB时钟GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;         //PB0,1GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;       //推挽输出GPIO_Initure.Pull=GPIO_PULLUP;                   //上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;      //高速HAL_GPIO_Init(GPIOB,&GPIO_Initure);             //初始化GPIOB.0和GPIOB.1HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);   //PB0置1HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);    //PB1置1
}

HAL 库中 GPIO 工作模式配置(H7)相关推荐

  1. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)

    [STM32笔记]HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒.串口唤醒和回调无法一起使用.接收数据不全的问题) [STM32笔记]低功耗模式配置及避坑汇总 前文: blog.csd ...

  2. 【四】零基础上手HAL库之—GPIO按键

    [四]零基础上手HAL库之-GPIO按键 3.1前言 我们在上一节已经知道了点灯操作,相当于是学会了GPIO输出的配置,接下来是GPIO输入完成按键扫描的操作. 前期准备 STM32各类型的板子(本人 ...

  3. STM32的HAL库SPI操作(Slave模式)

    Slave模式设置 SPI的使用,Master端的很多,Slave端的不好找,也很少,能参考的也很少,后面具体来看一下: Slave端的初始化程序和Master端的只有一行不同 hspi1.Init. ...

  4. 如何从HAL库中找到寄存器的蛛丝马迹

    以下文章来源于:公_众_号开源电子网 读取更多技术文章,请扫码关注 如何从HAL库中找到寄存器的蛛丝马迹 对于初学者来说,有时候知其然而不知其所以然,换句话来讲,知道这个东西是这样子操作,但是不知道为 ...

  5. hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...

    自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...

  6. gpio的8种工作模式_Stm32之GPIO工作模式简介

    GPIO的8种工作模式 GPIO初始化结构体的时候,必须要配置合适的工作模式,这样才能使得IO口发挥应有的作用.工作模式大体上共分为输入输出两类,共8种,下面将介绍这8种工作模式. GPIO工作模式 ...

  7. Apache 工作模式配置优化

    Apahce 工作模式配置 1.查看当前MPM工作模式 /usr/local/apache2/bin/apachectl -VServer version: Apache/2.4.27 (Unix) ...

  8. STM32F4 HAL库开发 --时钟使能和配置

    在STM32F4的HAL库中,外设时钟使能操作都是在RCC相关固件库文件头文件stm32f4xx_hal_rcc.h 定义的.外设时钟使能在HAL库中都是通过宏定义标识符来实现.首先,我们来看看GPI ...

  9. 【STM32】HAL库-电源控制(低功耗模式)

    电源框图 STM32 的电源系统主要分为备份域电路.内核电路以及 ADC 电路三部分 备份域电路 STM32 的 LSE 振荡器.RTC.备份寄存器及备份 SRAM 这些器件被包含进备份域电路中,这部 ...

最新文章

  1. 爬虫学习笔记(十七)—— 字符验证码
  2. matlab潮流程序,IEEE33节点matlab潮流程序.doc
  3. 为什么 ASP.NET Core WebAPI 继承 ControllerBase 而不是 Controller ?
  4. android studio简易记账本,Android记账本
  5. [转] 我回答了90%的面试题,为什么还被拒?
  6. 美团打车低至1分,前三月司机零抽成,快车市场将再起波澜
  7. linux 提取有效源码,MPSOC之4——petalinux提取源码
  8. 架构案例丨微信Android客户端架构演进之路
  9. 小米手机助手linux,小米手机助手
  10. 用python处理蛋白质互作信息
  11. Labelling tools 的环境配置
  12. 希捷硬盘查询保修期限的网址
  13. Partition Refinement
  14. 数字货币或将消灭银行 未来3至5年,银行业可能将崩溃?
  15. linux滚动升级版本,Linux发行基础滚动版本与标准版本 | MOS86
  16. cbac式_abca式的成语
  17. 【智能制造】物流装备制造业发展全解读
  18. 中山大学计算机在职研究生分数线,中山大学在职研究生考试成绩多少分通过
  19. 程序员:不是所有的程序员称为程序员!
  20. 耗时一个月,开发了一款基于腾讯语音自动给视频添加字幕的软件

热门文章

  1. COMP0037 Coursework
  2. Java Comparator使用指南 ---- 看这一篇就够了
  3. Android Settings总结
  4. 大话设计模式读书笔记
  5. 词霸天下---词根234【-zo(o)- 动 物】
  6. java雪花_基于java实现的雪花算法
  7. html5表白网站_html5表白_html5表白模板_程序员专属情人节表白网站
  8. 关于ATSHA204a的使用流程
  9. 周志华西瓜书学习笔记(一)
  10. Excel快速入门01