STM32 HAL GPIO介绍

STM32 HAL库是一种用于编程STM32微控制器的软件库。其中包含了许多的API函数,可以用于控制各种硬件模块,如GPIO、UART、SPI、I2C等等。在本文中,我们将着重介绍STM32 HAL库中与GPIO相关的API函数。

GPIO,即General Purpose Input/Output,通用输入输出口,是STM32微控制器中最基本的外设之一。它可以用来连接外部设备,如LED、键盘、传感器等等。在STM32 HAL库中,GPIO的控制主要包括以下几个方面:

GPIO初始化
在使用GPIO之前,需要先对其进行初始化。在STM32 HAL库中,GPIO的初始化函数为HAL_GPIO_Init()。该函数的参数包括GPIO端口号、引脚号、模式(输入/输出)、输出类型(推挽/开漏)、输出速度(低/中/高)和上拉/下拉配置等等。

GPIO读写操作
在GPIO初始化之后,可以通过HAL_GPIO_ReadPin()和HAL_GPIO_WritePin()函数来进行GPIO的读写操作。其中,HAL_GPIO_ReadPin()函数用于读取GPIO输入的电平值,而HAL_GPIO_WritePin()函数用于向GPIO输出电平值。以下是一个GPIO读写操作的示例:
读:

int main(void)
{
    HAL_Init();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct;
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    while (1)
    {
        if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
        {
            // do something
        }
    }
}

写:

int main(void)
{
	HAL_Init();
	__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_0; //PA0口
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出模式
	GPIO_InitStruct.Pull = GPIO_NOPULL; //不带上下拉电阻
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速模式
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化GPIOA口配置
    while (1)
    {
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); //设置PA0口为高电平
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); //设置PA0口为低电平
    }
}

GPIO中断
除了读写操作之外,GPIO还可以通过中断的方式来进行操作。在STM32 HAL库中,可以通过HAL_GPIO_EXTI_Callback()函数来实现GPIO中断的回调函数。具体来说,需要在GPIO初始化时设置中断触发方式(上升沿、下降沿、双边沿等),并开启相应的中断。以下是一个GPIO中断的示例:

// GPIO中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
    if(GPIO_Pin == GPIO_PIN_0){
        // GPIOA的PIN_0引脚触发中断
    }
}
int main(void)
{
	HAL_Init();
	__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
	// 初始化GPIO引脚中断
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.Pin = GPIO_PIN_0;
	GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
	GPIO_InitStruct.Pull = GPIO_PULLDOWN;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	// 使能GPIO中断
	HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
综上所述,STM32 HAL库中GPIO的控制主要包括GPIO的初始化、读写操作和中断等。通过这些API函数的使用,可以轻松地实现对GPIO的控制。

你可能感兴趣的:(STM32,HAL库,stm32,单片机,嵌入式硬件)