思澈科技软件开发工具包  2.20
GPIO

HAL GPIO 模块提供抽象的软件接口操作硬件GPIO模块. HPSYS和LPSYS各有一个GPIO模块,支持的特性有:

  • 输出模式
  • 输入模式, 可检测输入电平触发中断,支持高电平、低电平、上升沿、下降沿和双沿检测

HPSYS的硬件GPIO模块为 hwp_gpio1 (或称为GPIO_A), LPSYS的硬件GPIO模块为 hwp_gpio2 (或称为GPIO_B).

Note
如果需要设置GPIO管脚为其他功能,或者更改上下拉驱动能力,请参考pinmux的设置PINMUX

详细的API说明参考 GPIO .

使用GPIO HAL

输出模式

配置GPIO1 pin10(即GPIO_A10)为输出模式,输出高电平

void write_pin(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
uint16_t pin = 10;
/* set GPIO1 pin10 to output mode */
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
/* set pin to high */
HAL_GPIO_WritePin(gpio, pin, GPIO_PIN_SET);
}

输入模式(无中断)

配置GPIO1 pin10(即GPIO_A10)为输入模式,读取电平状态

void read_pin(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
uint16_t pin = 10;
/* set GPIO1 pin10 to input mode */
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
/* read pin state */
state = HAL_GPIO_ReadPin(gpio, pin);
}

输入模式(有中断)

配置GPIO1 pin10(即GPIO_A10)为输入模式,双沿检测

/* GPIO1 IRQ Handler in vector table */
void GPIO1_IRQHandler(void)
{
for (uint32_t i = 0; i <= 41; i++)
{
}
}
/* override the weak Callback to add user defined action, it's called by HAL_GPIO_EXTI_IRQHandler */
void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin)
{
state = HAL_GPIO_ReadPin(hgpio, GPIO_Pin);
}
void detect_pin(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
uint16_t pin = 10;
/* set GPIO1 pin10 to input mode */
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
/* enable GPIO1 pin10 double edge detection */
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
GPIO_InitStruct.Pin = pin;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(gpio, &GPIO_InitStruct);
/* Enable GPIO1 interrupt */
HAL_NVIC_SetPriority(GPIO1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(GPIO1_IRQn);
}
GPIO_InitTypeDef::Mode
uint32_t Mode
Definition: bf0_hal_gpio.h:124
GPIO_MODE_INPUT
#define GPIO_MODE_INPUT
Definition: bf0_hal_gpio.h:178
GPIO_NOPULL
#define GPIO_NOPULL
Definition: bf0_hal_gpio.h:195
GPIO_InitTypeDef::Pull
uint32_t Pull
Definition: bf0_hal_gpio.h:127
HAL_GPIO_WritePin
void HAL_GPIO_WritePin(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin, GPIO_PinState PinState)
Set or clear the selected data port bit.
HAL_GPIO_EXTI_IRQHandler
void HAL_GPIO_EXTI_IRQHandler(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin)
Handle EXTI interrupt request.
GPIO_MODE_IT_RISING_FALLING
#define GPIO_MODE_IT_RISING_FALLING
Definition: bf0_hal_gpio.h:183
GPIO_PinState
GPIO_PinState
GPIO Bit SET and Bit RESET enumeration.
Definition: bf0_hal_gpio.h:135
GPIO_TypeDef
Definition: bf0_hal_gpio.h:73
HAL_NVIC_SetPriority
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
Set the priority of an interrupt.
HAL_GPIO_EXTI_Callback
void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin)
EXTI line detection callback.
HAL_NVIC_EnableIRQ
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
Enable a device specific interrupt in the NVIC interrupt controller.
GPIO_InitTypeDef::Pin
uint32_t Pin
Definition: bf0_hal_gpio.h:121
GPIO_MODE_OUTPUT
#define GPIO_MODE_OUTPUT
Definition: bf0_hal_gpio.h:179
hwp_gpio1
#define hwp_gpio1
Definition: register.h:583
HAL_GPIO_Init
void HAL_GPIO_Init(GPIO_TypeDef *hgpio, GPIO_InitTypeDef *GPIO_Init)
Initialize the GPIO peripheral according to the specified parameters in the GPIO_Init.
GPIO_InitTypeDef
GPIO Init structure definition.
Definition: bf0_hal_gpio.h:120
HAL_GPIO_ReadPin
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *hgpio, uint16_t GPIO_Pin)
Read the specified input port pin.