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);
}
}
本文详细介绍了STM32中断服务函数的配置步骤,包括初始化GPIO、定时器等中断源,设置优先级和启动函数。在STM32F4xx_IT.c文件中,重点讲解了EXTI9_5_IRQHandler中断服务函数及其内部调用的HAL_GPIO_EXTI_IRQHandler函数,用于处理外部中断。HAL_GPIO_EXTI_Callback函数则用于自定义中断触发后的具体操作,例如读取按键状态、蜂鸣器控制等。通过实例展示了中断服务的完整流程。
1万+

被折叠的 条评论
为什么被折叠?



