打印

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

[复制链接]
203|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电员师|  楼主 | 2018-8-10 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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了,定义如下:
typedef struct
{
  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
                           This parameter can be any value of @ref GPIO_pins_define */

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

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

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

  uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins.
                            This parameter can be a value of @ref GPIO_Alternate_function_selection */
}GPIO_InitTypeDef;

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

471

主题

480

帖子

0

粉丝