开启你的编程学习之旅

云课堂提供高质量的编程课程,从入门到精通,助你成为技术大牛

立即开始学习

stm32开发板教程

作者: 孙老师 更新: 2025-10-28 阅读: 32 难度: 初级
学习工具

3. STM32 中断系统

中断是 STM32 响应外部事件的重要机制,可以实现实时响应和高效处理。

中断类型

  • 外部中断(EXTI):GPIO 引脚中断
  • 定时器中断:定时器溢出、比较匹配
  • 串口中断:接收完成、发送完成
  • DMA 中断:数据传输完成

外部中断配置

EXTI 配置
// 配置 GPIO 为中断模式 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; // 上升沿触发 GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置 EXTI 中断线 HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); // 设置优先级 HAL_NVIC_EnableIRQ(EXTI0_IRQn); // 使能中断

中断服务函数

中断处理
// EXTI 线0中断服务函数 void EXTI0_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); } // HAL 库中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_0) { // 处理 PA0 引脚的中断 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } }

NVIC 中断优先级

优先级配置
// 设置中断优先级分组 HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); // 配置具体中断的优先级 // 参数:中断号,抢占优先级,子优先级 HAL_NVIC_SetPriority(EXTI0_IRQn, 1, 0); // 较高优先级 HAL_NVIC_SetPriority(EXTI1_IRQn, 2, 0); // 较低优先级 // 使能中断 HAL_NVIC_EnableIRQ(EXTI0_IRQn); HAL_NVIC_EnableIRQ(EXTI1_IRQn);

中断使用注意事项

  • 中断服务函数应尽量简短
  • 避免在中断中进行复杂计算
  • 使用标志位在中断和主程序间通信
  • 注意中断嵌套和优先级设置
  • 及时清除中断标志位
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。