stm32f103 gpio中断hal
时间: 2023-07-28 19:06:45 浏览: 55
在使用STM32F103的HAL库进行GPIO中断编程时,需要进行以下步骤:
1. 初始化GPIO引脚:调用HAL_GPIO_Init()函数,传入GPIO_Pin和GPIO_Mode参数。
2. 配置中断触发方式:调用HAL_GPIO_ReadPin()函数,传入GPIO_Pin参数,得到引脚当前状态。然后调用HAL_GPIO_WritePin()函数,传入GPIO_Pin和GPIO_Mode参数,配置引脚中断触发方式。
3. 编写中断服务函数:编写一个中断服务函数,根据中断源判断是哪个GPIO引脚触发了中断,并执行相应的操作。
4. 使能中断:调用HAL_NVIC_SetPriority()函数设置中断优先级,然后调用HAL_NVIC_EnableIRQ()函数使能中断。
下面是一个示例代码:
```
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
{
// 处理GPIO_Pin_0的中断
}
else if(GPIO_Pin == GPIO_PIN_1)
{
// 处理GPIO_Pin_1的中断
}
}
int main()
{
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 使能中断
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
while(1)
{
// 主循环
}
}
```
在上面的示例代码中,我们初始化了GPIOA的0、1引脚为下降沿触发的中断模式,并使能了EXTI0和EXTI1的中断。在HAL_GPIO_EXTI_Callback()函数中,我们根据GPIO_Pin参数判断是哪个引脚触发了中断,然后执行相应的操作。