大白话畅谈:stm32中断和FreeRTOS的中断

STM32 的中断(裸机开发)

STM32 的中断就像是 "紧急电话" ,当某个硬件事件(比如按键按下、定时器到点、串口收到数据)发生时,CPU 会 暂停 当前的任务,立刻处理 这个紧急事件,处理完再回来继续原来的工作。

关键点:
  1. 中断源

    • 比如 GPIO 引脚电平变化、定时器溢出、UART 收到数据等,都能触发中断。

    • STM32 的中断向量表(startup_stm32xxxxx.s)定义了所有可能的中断。

  2. 中断优先级

    • STM32 使用 NVIC(嵌套向量中断控制器)管理优先级。

    • 优先级高的中断可以打断优先级低的中断(嵌套中断)。

  3. 中断处理函数(ISR)

    • 在代码里写一个函数,比如 void USART1_IRQHandler(),STM32 检测到中断后会自动跳转执行它。

    • ISR 要尽量短,避免长时间占用 CPU,否则会影响其他中断和主程序。

  4. 中断开关

    • HAL_NVIC_EnableIRQ(USART1_IRQn) ------ 开启中断

    • HAL_NVIC_DisableIRQ(USART1_IRQn) ------ 关闭中断


FreeRTOS 的中断管理

FreeRTOS 是一个实时操作系统,它 仍然依赖 STM32 的中断机制 ,但增加了 任务调度临界区保护,避免中断和任务互相干扰。

关键点:
  1. FreeRTOS 如何管理中断?

    • FreeRTOS 提供了 "中断安全"的 API (以 FromISR 结尾的函数),比如 xQueueSendFromISR(),可以在中断里安全地发送数据给任务。

    • 普通任务 API(如 xQueueSend())不能在中断里用!

  2. 临界区保护(关中断)

    • taskENTER_CRITICAL() ------ 临时关闭中断(防止任务被中断打断)

    • taskEXIT_CRITICAL() ------ 恢复中断

    • 适用于 保护共享数据(比如全局变量)。

  3. 任务和中断的交互

    • 中断发送信号量/队列任务接收并处理(避免在中断里做复杂操作)。

    • 例如:

      cs 复制代码
      // 在中断里发送数据
      BaseType_t xHigherPriorityTaskWoken = pdFALSE;
      xQueueSendFromISR(xQueue, &data, &xHigherPriorityTaskWoken);
      portYIELD_FROM_ISR(xHigherPriorityTaskWoken); // 如果需要,立即切换任务
  4. 中断优先级 vs FreeRTOS 优先级

    • FreeRTOS 的 任务切换(PendSV) 通常设为 最低优先级,确保高优先级中断能立即响应。

    • SysTick 中断 (系统心跳)负责 任务时间片调度


对比总结

对比项 STM32(裸机) FreeRTOS
中断处理 直接写 ISR FromISR API
任务切换 由 SysTick 和 PendSV 管理
临界区保护 手动开关中断 taskENTER_CRITICAL()
数据交互 全局变量(需保护) 队列、信号量(更安全)

大白话总结

  • STM32 中断 :就像 "接紧急电话",处理完就回去继续干活。

  • FreeRTOS 中断 :在"接电话"时,还能 告诉任务 (比如:"数据收到了,你去处理吧"),但 不能耽误太久,否则系统会卡住。

  • FreeRTOS 的优势 :让中断和任务 安全协作,避免数据混乱,提高系统稳定性。

适用场景:

  • 裸机中断:简单项目,比如 LED 闪烁、按键检测。

  • FreeRTOS 中断:复杂系统,比如多任务 + 网络通信 + 传感器数据处理。

相关推荐
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11016 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元6 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133976 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315206 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书6 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang6 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟6 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126916 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315206 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机