第一次写博客,也是第一次翻译英文文档,因为网上都没找到hal固件库的文档,索性自己花了半天翻译了,之后将继续更新其他外设
20 HAL GPIO Generic Driver
20.1 GPIO固件驱动寄存器结构体
20.1.1 GPIO_InitTypeDef
GPIO_InitTypeDef被定义在 stm32l5xx_hal_gpio.h 这个头文件中
数据域
• uint32_t Pin
•uint32_t Mode
•uint32_t Pull
•uint32_t speed
Field Documentation 字段文档
•uint32_t GPIO_InitTypeDef::Pin
指定GPIO的引脚进行配置,这个参数可以是GPIO_pins的任意值
•uint32_t GPIO_InitTypeDef::Mode
指定选定的引脚模式,这个参数可以是GPIO_mode中的任意值
•uint32_t GPIO_InitTypeDef::Pull
GPIO_pull指定选定的引脚为拉高或者拉低的电平,这个参数可以是GPIO_pull中的任意值
•uint32_t GPIO_InitTypeDef::Speed
指定选定的引脚速度,这个参数可以是GPIO_speed中的任意值
20.2 GPIO固件驱动应用程序接口描述
接下来的章节列出了多种GPIO库的不同功能
20.2.1 GPIO外围设备特征
服从于数据手册中列出的每个I/O口的特定硬件特征,每个通用I/O口可以被单独地由软件配置成以下几种模式:
• 输入模式
• 模拟端子模式
• 输出模式
•复用功能模式
• 外部中断线
在复位和刚刚复位完的期间,复用功能和外部中断线处于休眠状态,I/O口配置为浮空输入模式
所有的GPIO引脚都有内部拉高或者拉低的弱电阻,可以人为激活或者休眠
在输出或者复用模式每个I/O口可以被配置成开漏或者推挽类型,I/O口的速度可以由VDD的值进行选择决定
所有的端口都有外部中断/事件功能,为了使用外部中断线,端口必须被配置成为输入模式。所有的可获得GPIO引脚都被连接到了EXTI0-EXTI15这16条外部中断/事件线上。
外部的中断/事件控制器由多达20个的连接线设备中的边缘检测器组成,或者由19个其他设备中生成事件/中断请求边缘检测器组成。每个输入线都能独立地配置去选择类型(事件或者中断),相应的触发事件(上升或者下降)。
每条线都可以单独屏蔽,一个挂起的寄存器维持了中断需求的状态行。
20.2.2 如何使用这个驱动
1.使能GPIO APB2时钟使用了如下的函数:__HAL_RCC_GPIOx_CLK_ENABLE().
2.配置GPIO引脚使用了HAL_GPIO_Init().函数
—配置IO模式使用GPIO_InitTypeDef structure中的“Mode”成员变量
—激活使能上拉,下拉电平使用了GPIO_InitTypeDef structure.中的“Pull”成员变量
—如果使用输出或者复用功能模式:通过GPIO_InitTypeDef structure中的“Speed”成员变量配置速度。
—当引脚被用作ADC或者DAC输出通道时,需要被配置成为模拟端子模式
—在外部中断/事件选择的情况下,GPIO_InitTypeDef结构中的“Mode”成员选择类型(中断或事件)和相应的触发事件(上升或下降或两者都有)。
3.当选择了外部中断/事件模式,使用HAL_NVIC_SetPriority()函数配置NVIC IRQ优先级映射到EXTI线上,并且通过HAL_NVIC_EnableIRQ().函数使能它。
4.在输入模式下使用use HAL_GPIO_ReadPin()函数获得引脚的配置级别
5.在输出模式下使用HAL_GPIO_WritePin()/HAL_GPIO_TogglePin()函数设置或者重设引脚的级别
6. 使用HAL_GPIO_LockPin()来锁定引脚配置直到下一次复位
7.在复位或者刚复位期间,复用功能未激活,GPIO引脚被配置为浮空模式(除了JTAG引脚)。
8.当LSE振荡器关闭的时候,它的OSC32_IN 和OSC32_OUT可以被用作一般用途(分别是PC14和PC15),LSE比GPIO函数有更高的优先级。
9. 当HSE振荡器关闭的时候,HSE振荡器引脚OSC_IN/OSC_OUT能被相应地用作PD0和PD1的一般用途,HSE比GPIO函数拥有更高的优先级。
20.2.3 初始化和反初始化函数
这个章节提供了函数以供初始化和反初始化GPIOS使用
这个章节包含了以下的接口:
• HAL_GPIO_Init
• HAL_GPIO_DeInit
20.2.4 IO操作函数
这部分提供了一系列函数管理GPIOS
这个选项包含了以下接口:
• HAL_GPIO_ReadPin
• HAL_GPIO_WritePin
• HAL_GPIO_TogglePin
• HAL_GPIO_LockPin
• HAL_GPIO_EXTI_IRQHandler
• HAL_GPIO_EXTI_Callback
20.2.5 功能详细说明
HAL_GPIO_Init
函数名
void HAL_GPIO_Init (GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init)
函数描述
根据GPIO_Init中的特定参数初始化GPIOX的外围设备
参数
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Init:指向了特定GPIO外围设备配置信息的GPIO_InitTypeDef结构体
返回值:
• None:
HAL_GPIO_DeInit
函数名:
void HAL_GPIO_DeInit (GPIO_TypeDef * GPIOx, uint32_t GPIO_Pin)
函数描述:
将GPIOx外围寄存器反初始化为它们的默认重置值。
参数:
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Pin: (0…15).中的任一个使用到的数字
返回值:
• None:
HAL_GPIO_ReadPin
函数名称:
GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
函数描述:
读特定的输入端口引脚
参数:
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Pin: (0…15).中的任一个使用到的数字
返回值:
• The: input port pin value. 输入引脚的值
HAL_GPIO_WritePin
函数名:
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
函数描述:
设置或者清除选定的数据端口位
参数:
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Pin: (0…15).中的任一个使用到的数字
• PinState: GPIO_PIN_RESET或者GPIO_PIN_SET
返回值:
• None:
Notes:
•这个函数使用了GPIOx_BSRR寄存器允许原子读/修改访问,这样,在读取和修改访问之间就不存在发生IRQ的风险。
HAL_GPIO_TogglePin
函数名:
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
函数描述:
切换指定的GPIO引脚
参数:
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Pin: (0…15).中的任一个使用到的数字
返回值:
• None:
HAL_GPIO_LockPin
函数名称:
HAL_StatusTypeDef HAL_GPIO_LockPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
函数描述:
锁定GPIO引脚配置寄存器
参数:
• GPIOx:A-G取决于设备使用的哪一个
• GPIO_Pin: (0…15).中的任一个使用到的数字
返回值:
• None:
Notes:
锁定机制允许IO配置被冻结,当锁序列应用于一个端口位时,下次复位之前,不能再修改端口位的值。
HAL_GPIO_EXTI_IRQHandler
函数名:
void HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin)
函数描述:
这个函数处理外部中断请求
参数:
• GPIO_Pin: 特定了连接到外部中断线上的引脚
返回值:
• None:
HAL_GPIO_EXTI_Callback
函数名:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)
函数描述:
外部中断检测回调。
参数:
• GPIO_Pin: 特定了连接到外部中断线上的引脚
返回值:
• None:
20.3 GPIO固件驱动程序定义
接下来的章节列出了下一节列出了模块的各种定义和宏。
20.3.1 GPIO
GPIO
GPIO 导出宏
__HAL_GPIO_EXTI_GET_FLAG
描述:
•检测特定的外部中断线标志是否被设置
参数:
·参数:
EXTI_LINE:指定要检查的外部中断线标志。这个参数可以是GPIO_PIN_x,x可以是(0…15)
•返回值:
• The: new state of EXTI_LINE (SET or RESET).
__HAL_GPIO_EXTI_CLEAR_FLAG
描述:
•清除外部中断线的挂起标志
参数:
• EXTI_LINE:指定清除线标志,这个参数可以是任意GPIO_PIN_x的组合
返回值:
• None:
__HAL_GPIO_EXTI_GET_IT
描述:
•检测指定的外部中断线是否被声明
参数:
•EXTI_LINE:指定外部中断线进行检测,这个参数可以是GPIO_PIN_x中任一个
返回值:
• The: new state of EXTI_LINE (SET or RESET).
__HAL_GPIO_EXTI_CLEAR_IT
描述:
•清除外部中断线的挂起位
参数:
• EXTI_LINE:指定外部中断线进行清除,这个参数可以是GPIO_PIN_x的任一个
返回值:
• None
__HAL_GPIO_EXTI_GENERATE_SWIT
描述:
•在外部中断线上获得一个软件中断
参数:
• __EXTI_LINE__:指定外部中断线进行检测,这个参数可以是GPIO_PIN_x中的任一个
返回值:
• None
GPIO mode define
GPIO_MODE_INPUT
输入浮空模式
GPIO_MODE_OUTPUT_PP
推挽输出模式
GPIO_MODE_OUTPUT_OD
开漏输出模式
GPIO_MODE_AF_PP
复用推挽输出
GPIO_MODE_AF_OD
复用开漏输出
GPIO_MODE_AF_INPUT
复用输入模式
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
外部事件模式下降/上升边缘触发检测
GPIO pins define
GPIO_PIN_0
GPIO_PIN_1
GPIO_PIN_2
GPIO_PIN_3
GPIO_PIN_4
GPIO_PIN_5
GPIO_PIN_6
GPIO_PIN_7
GPIO_PIN_8
GPIO_PIN_9
GPIO_PIN_10
GPIO_PIN_11
GPIO_PIN_12
GPIO_PIN_13
GPIO_PIN_14
GPIO_PIN_15
GPIO_PIN_All
GPIO_PIN_MASK
GPIO pull define
GPIO_NOPULL
没有激活上拉或者下拉
GPIO_PULLUP
激活上拉模式
GPIO_PULLDOWN
激活下拉模式
GPIO speed define
GPIO_SPEED_FREQ_LOW
低速
GPIO_SPEED_FREQ_MEDIUM
中速
GPIO_SPEED_FREQ_HIGH
高速
21 HAL GPIO Extension Driver HAL GPIO外部驱动
接下来的章节列举了
21.1 GPIOEx固件驱动API接口函数描述
接下来的章节列举了GPIOEx库的不同功能
21.1.1 GPIO外围扩展特征
F1系列的GPIO模块,也管理AFIO寄存器:
21.1.2 怎么使用驱动
这个驱动提供了函数使用EVENTOUT Cortex功能
1.使用HAL_GPIOEx_ConfigEventout()配置EVENTOUT Corte功能
2.使用HAL_GPIOEx_EnableEventout()激活EVENTOUT Corte功能
3.使用HAL_GPIOEx_DisableEventout()失效EVENTOUT Corte功能
21.1.3 扩展功能函数
这个章节提供了以下函数:
1.使用HAL_GPIOEx_ConfigEventout()配置EVENTOUT Corte功能
2.使用HAL_GPIOEx_EnableEventout()激活EVENTOUT Corte功能
3.使用HAL_GPIOEx_DisableEventout()失效EVENTOUT Corte功能
这个章节包含了以下API:
• HAL_GPIOEx_ConfigEventout
• HAL_GPIOEx_EnableEventout
• HAL_GPIOEx_DisableEventout
21.1.4 功能详细说明
HAL_GPIOEx_ConfigEventout
函数名:
void HAL_GPIOEx_ConfigEventout (uint32_t GPIO_PortSource, uint32_t GPIO_PinSource)
函数描述:
配置EVENTOUT Cortx信号将被连接的端口和引脚
参数:
• GPIO_PortSource:选择端口输出EVENTOUT Cortx信号,这个参数可以是EVENTOUT Port的值
• GPIO_PinSource: 选择引脚输出EVENTOUT Cortx信号,这个参数可以是EVENTOUT Pin的值
返回值:
• None:
HAL_GPIOEx_EnableEventout
函数名:
void HAL_GPIOEx_EnableEventout (void )
函数描述:
使能事件输出Event OutPut
返回值:
• None:
HAL_GPIOEx_DisableEventout
函数名:
void HAL_GPIOEx_DisableEventout (void )
函数描述:
失能EventOutput
返回值:
• None:
21.2 GPIOEx Firmware driver defines
__HAL_AFIO_REMAP_SPI1_ENABLE
__HAL_AFIO_REMAP_SPI1_DISABLE
__HAL_AFIO_REMAP_I2C1_ENABLE
__HAL_AFIO_REMAP_I2C1_DISABLE
__HAL_AFIO_REMAP_USART1_ENABLE
__HAL_AFIO_REMAP_USART1_DISABLE
__HAL_AFIO_REMAP_USART2_ENABLE
__HAL_AFIO_REMAP_USART2_DISABLE
__HAL_AFIO_REMAP_USART3_ENABLE
__HAL_AFIO_REMAP_USART3_PARTIAL
__HAL_AFIO_REMAP_USART3_DISABLE
__HAL_AFIO_REMAP_TIM1_ENABLE
__HAL_AFIO_REMAP_TIM1_PARTIAL
__HAL_AFIO_REMAP_TIM1_DISABLE
__HAL_AFIO_REMAP_TIM2_ENABLE
__HAL_AFIO_REMAP_TIM2_PARTIAL_2
__HAL_AFIO_REMAP_TIM2_PARTIAL_1
__HAL_AFIO_REMAP_TIM2_DISABLE
__HAL_AFIO_REMAP_TIM3_ENABLE
__HAL_AFIO_REMAP_TIM3_PARTIAL
__HAL_AFIO_REMAP_TIM3_DISABLE
__HAL_AFIO_REMAP_TIM4_ENABLE
__HAL_AFIO_REMAP_TIM4_DISABLE
__HAL_AFIO_REMAP_CAN1_1
__HAL_AFIO_REMAP_CAN1_2
__HAL_AFIO_REMAP_CAN1_3
__HAL_AFIO_REMAP_PD01_ENABLE
__HAL_AFIO_REMAP_PD01_DISABLE
__HAL_AFIO_REMAP_TIM5CH4_ENABLE
__HAL_AFIO_REMAP_TIM5CH4_DISABLE
__HAL_AFIO_REMAP_ETH_ENABLE
__HAL_AFIO_REMAP_ETH_DISABLE
__HAL_AFIO_REMAP_CAN2_ENABLE
__HAL_AFIO_REMAP_CAN2_DISABLE
__HAL_AFIO_ETH_RMII
__HAL_AFIO_ETH_MII
__HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE
__HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE
__HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE
__HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE
__HAL_AFIO_REMAP_SWJ_ENABLE
__HAL_AFIO_REMAP_SWJ_NONJTRST
__HAL_AFIO_REMAP_SWJ_NOJTAG
__HAL_AFIO_REMAP_SWJ_DISABLE
_HAL_AFIO_REMAP_SPI3_ENABLE
__HAL_AFIO_REMAP_SPI3_DISABLE
__HAL_AFIO_TIM2ITR1_TO_USB
__HAL_AFIO_TIM2ITR1_TO_ETH
__HAL_AFIO_ETH_PTP_PPS_ENABLE
__HAL_AFIO_ETH_PTP_PPS_DISABLE
AFIO_EVENTOUT_PIN_0
AFIO_EVENTOUT_PIN_1
AFIO_EVENTOUT_PIN_2
AFIO_EVENTOUT_PIN_3
AFIO_EVENTOUT_PIN_4
AFIO_EVENTOUT_PIN_5
。
。
。
AFIO_EVENTOUT_PIN_15
IS_AFIO_EVENTOUT_PIN
AFIO_EVENTOUT_PORT_A
AFIO_EVENTOUT_PORT_B
AFIO_EVENTOUT_PORT_C
AFIO_EVENTOUT_PORT_D
AFIO_EVENTOUT_PORT_E
IS_AFIO_EVENTOUT_PORT