硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2959|回复: 5
收起左侧

[HAL学习笔记] HAL库源文件stm32h7xx_hal_gpio.c学习笔记(2018-07-26 V1.1)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2018-7-19 15:19:32 | 显示全部楼层 |阅读模式
2018-07-19  V1.0  
1、首发
2018-07-26  V1.1  
1、修改系统上电后,H7系列引脚状态是模拟模式,并非浮空输入,这点要特别注意。


==============================================================================
                                                                   ##### GPIO 外设特色  #####
==============================================================================

1 、GPIO可配置的模式
  (+) 输入模式
  (+) 模拟模式
  (+) 输出模式
  (+) 复用功能模式
  (+) 外部外部中断/事件

2、系统上电后,引脚默认状态是模拟模式。

3、所有的引脚有弱上拉和弱下拉电阻,阻值范围30-50KΩ。其中配置为模拟模式时,上拉和下拉被硬件禁止,其它的输入,输出和复用都可以配置上拉和下拉。

4、在输出或者复用模式,每个引脚可以配置成推挽或者开漏,且有GPIO速度等级可配置。另外注意,不同的供电范围,实际速度等级是有些区别的。

5、每个GPIO都可以配置成外部中断/事件模式,但要特别注意,引脚要配置成输入模式,在芯片的内部有个多路选择器,选择引脚与16个外部中断/事件EXTI0 - EXTI15中的那个导通。
     这就决定了,每个外部中断/事件只能与一个引脚选通,如果用户配置了多个引脚PA0,PB0,PC0等,那么只有一个能够与EXTI0选通。

6、外部中断/事件控制器由23个边沿检测器组成,其中16个连接到GPIO。用于生成事件/中断请求,每个输入可以独立配置成中断或事件,且上升沿和下降沿可选择


==============================================================================
                                                                  ##### 如何使用此驱动  #####
==============================================================================  


1、使能GPIO所在总线的AHB时钟,__HAL_RCC_GPIOx_CLK_ENABLE()

2、通过函数HAL_GPIO_Init()配置GPIO。
(1)、通过结构体GPIO_InitTypeDef的成员Mode配置输入,输出,模拟等模式。
(2)、通过结构体GPIO_InitTypeDef的成员Pull配置上拉、下拉电阻。
(3)、通过结构体GPIO_InitTypeDef的成员Speed配置GPIO速度等级。
(4)、如果选择了复用模式,那么就需要配置结构体GPIO_InitTypeDef的成员Alternate。
(5)、如果引脚功能用于ADC、DAC的话,需要配置引脚为模拟模式。
(6)、如果是用于外部中断/事件,结构体GPIO_InitTypeDef的成员Mode可以配置相应模式,相应的上升沿,下降沿或者双沿触发也可以选择。

3、如果配置了外部中断/事件,可以通过函数HAL_NVIC_SetPriority设置优先级,然后调用函数HAL_NVIC_EnableIRQ使能此中断。

4、输入模式读取引脚状态可以使用函数HAL_GPIO_ReadPin。

5、输出模式设置引脚状态可以调用函数HAL_GPIO_WritePin()和HAL_GPIO_TogglePin。

6、系统上电复位后,GPIO默认是模拟模式,除了JTAG相关引脚。

7、关闭LSE的话,用到的两个引脚OSC32_IN和OSC32_OUT(分别是PC14,PC15)可以用在通用IO,如果开启了,就不能再做GPIO。

8、关闭HSE的话,用到的两个引脚OSC_IN和OSC_OUT(分别是PH0,PH1)可以用在通用IO,如果开启了,就不能再做GPIO。

==============================================================================
                                                                   ##### 源码学习  #####
==============================================================================  


1、GPIO中最主要的就是结构体GPIO_InitTypeDef了,定义如下:
  1. typedef struct
  2. {
  3.   uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
  4.                            This parameter can be any value of @ref GPIO_pins_define */

  5.   uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
  6.                            This parameter can be a value of @ref GPIO_mode_define */

  7.   uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
  8.                            This parameter can be a value of @ref GPIO_pull_define */

  9.   uint32_t Speed;     /*!< Specifies the speed for the selected pins.
  10.                            This parameter can be a value of @ref GPIO_speed_define */

  11.   uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins.
  12.                             This parameter can be a value of @ref GPIO_Alternate_function_selection */
  13. }GPIO_InitTypeDef;
复制代码


(1)成员Pin用于配置选择的引脚,范围GPIO_PIN_0到GPIO_PIN_15,额外还可以选择GPIO_PIN_All和GPIO_PIN_MASK。

(2)成员Mode可以选择:
GPIO_MODE_INPUT                   /* 输入模式  */
GPIO_MODE_OUTPUT_PP           /* 推挽输出  */
GPIO_MODE_OUTPUT_OD          /* 开漏输出  */
GPIO_MODE_AF_PP                   /* 复用推挽  */
GPIO_MODE_AF_OD                  /* 复用开漏  */

GPIO_MODE_ANALOG                /* 模拟模式  */

GPIO_MODE_IT_RISING                  /* 外部中断,上升沿触发检测 */
GPIO_MODE_IT_FALLING                /* 外部中断,下降沿触发检测 */
GPIO_MODE_IT_RISING_FALLING    /* 外部中断,双沿触发检测   */

GPIO_MODE_EVT_RISING                /* 外部事件模式,上升沿触发检测  */
GPIO_MODE_EVT_FALLING              /* 外部事件模式,下降沿触发检测  */
GPIO_MODE_EVT_RISING_FALLING  /* 外部事件模式,双沿触发检测 */

(3)成员Pull用于配置上拉下拉电阻
GPIO_NOPULL         /* 无上拉和下拉电阻 */
GPIO_PULLUP          /* 带上拉电阻  */
GPIO_PULLDOWN    /* 带下拉电阻  */

(4)成员Speed用于配置GPIO速度等级,有下面四种可选:
GPIO_SPEED_FREQ_LOW             /* 低速 */
GPIO_SPEED_FREQ_MEDIUM       /* 中等速度 */
GPIO_SPEED_FREQ_HIGH            /* 快速 */
GPIO_SPEED_FREQ_VERY_HIGH  /* 高速  */

(5) 成员Alternate用于配置引脚复用,可选择的复用方式在文件stm32h7xx_hal_gpio_ex.h里面进行了定义,比如串口复用
GPIO_AF7_USART1   
GPIO_AF7_USART2   
GPIO_AF7_USART3      
GPIO_AF7_USART6   
GPIO_AF7_UART7     



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2018-7-19 15:29:43 | 显示全部楼层
占二楼,方便以后升级更新。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2018-7-19 21:11:09 | 显示全部楼层
eric2013 发表于 2018-7-19 15:29
占二楼,方便以后升级更新。

安哥开始搞HAL库了啊,是真的吗????
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2018-7-20 01:56:54 | 显示全部楼层
马梓熔 发表于 2018-7-19 21:11
安哥开始搞HAL库了啊,是真的吗????

了解下
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-7-20 19:29:32 | 显示全部楼层
搞起!!
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
 楼主| 发表于 2018-7-26 17:33:03 | 显示全部楼层
2018-07-26  V1.1  
1、修改系统上电后,H7系列引脚状态是模拟模式,并非浮空输入,这点要特别注意。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 04:30 , Processed in 0.325575 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表