首页 > 解决方案 > STM32 RTOS定时器中断和线程

问题描述

我正在做一个项目,我需要在 TIM 中断中执行 2 段代码。其中一个的优先级略高于另一个,并且两者都将在 2 个不同的计时器上运行(当然不是在同一时间间隔)。由于两个定时器与另一个定时器成正比(一个是 1KHz,一个是 8Khz),两者都会同时触发。

由于我已经将 RTOS 中间件用于其他目的(优先级也比这些低得多的线程),我正在考虑为每个这些例程创建一个线程。

但是,看看 cubeMX 如何生成代码,我什至想知道这是否可能。

我可以从任何线程启动/停止这些计时器,但只有一个 HAL_TIM_PeriodElapsedCallback,您通常使用如下 if 语句填充:

if (htim->Instance == TIM2)

我是否正确地假设,无论计时器从哪个线程启动,TIM 回调总是发生在 RTOS 环境的“外部”?

如果是这样,实现接近我需要的东西的更好策略是什么?

干杯

标签: timerstm32interruptrtos

解决方案


会触发中断。但要记住:

  1. ...fromISR如果您想使用任何RTOS 功能,它的优先级(不是 RTOS 优先级,因为它们不相关)必须低于 SVC 中断
  2. 它们不会同时发生(因为你只有一个核心)

推荐阅读