STM32 HAL库中断的大概流程

1. 初始化相应的GPIO、定时器等中断源不必多说;

2. 设置优先级、启动函数等;

3. 编辑中断服务函数,通常在stm32f4xx_it.c这个文件中(参考硬石开发板,MX_CUBE自动生成的好像也在这);

/* USER CODE BEGIN 1 */
void EXTI9_5_IRQHandler(void)
{
	/* USER CODE BEGIN EXTI3_IRQn 0 */
	/* USER CODE END EXTI3_IRQn 0 */
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);        //关键函数
	/* USER CODE BEGIN EXTI3_IRQn 1 */
	/* USER CODE END EXTI3_IRQn 1 */
}

HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); 这个函数是HAL库函数,可以追踪到源头

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
  /* EXTI line interrupt detected */
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
  {
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
    HAL_GPIO_EXTI_Callback(GPIO_Pin);        //关键函数
  }
}

HAL_GPIO_EXTI_Callback(GPIO_Pin)是HAL库声明的函数,在自己的文件中编辑好功能内容就OK了~

//举个栗子
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_7)
	{
		Key_Value=FSMC_READ_KEY_VALUE();
		Flag_Key_Int=1;
		beep_ctl(1);
		delay_ms(10);
		beep_ctl(0);
		__HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_7);
	}
}
经验分享 程序员 微信小程序 职场和发展