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; |