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);
}
}
