STM32 Cubemx FreeRTOS的timebase配置(转)

在使用STM32 CubeMX配置FreeRTOS时,系统建议避免使用Systick作为HAL的时间基源。本文介绍了如何改用TIM1作为HAL库的时钟源,以消除警告,并确保中断优先级正确设置,以防止在中断服务函数中调用HAL_Delay()时出现问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:https://blog.csdn.net/callmesumo/article/details/89403787

when FreeRtos is used.It is strongly recommended to use a HAL timebase source other than the Systic

stmcubeMX中进行配置的时候,如果使用了freertos系统,生成代码的时候会有如下提示:

 

 

 

其意思就是,当使用了FreeRtos的时候,强烈建议HAL库使用除了Systick以外的时钟源。也就是说当不使用FreeRtos的时候,HAL使用的是systick作为时钟源,现在使用了rtos,不建议hal库和rtos一起使用systick作为时钟源。<

### STM32CubeMX FreeRTOS 中断配置教程 #### 配置FreeRTOS支持 为了使STM32项目能够利用FreeRTOS操作系统来管理任务并优化中断响应,在STM32CubeMX环境中初始化新工程时,需勾选中间件选项下的FreeRTOS组件[^1]。 #### 创建硬件定时器用于时间基准 对于基于ARM Cortex-M系列MCU的开发板而言,通常会设置SysTick作为RTOS的时间片分配机制;然而也可以选用其他类型的计数器比如TIMx外设来充当HAL层所需的基础时钟源。当选择后者时,则涉及到额外添加`stm32f4xx_hal_timebase_tim.c`这样的特定实现文件[^3]。 #### 调整FreeRTOS参数设定 编辑`FreeRTOSConfig.h`头文件中的宏定义可以定制化内核行为特性,例如最大优先级数量、堆栈大小等重要属性。这些自定义化的调整有助于确保应用程序能够在资源受限环境下稳定运行的同时保持高效的性能表现。 #### 实现延迟执行逻辑换至后台线程 为了让ISR(Interrupt Service Routine)尽可能简洁高效,推荐做法是在其中仅完成必要的状态记录工作,并借助队列(queue)或信号量(semaphore)通知处于等待态的工作单元去进一步处理后续流程。这样做的好处是可以减少打断正常业务操作所带来的负面影响,同时也便于维护代码结构清晰度[^2]。 ```c // 假定已声明了一个二值型同步对象 SemaphoreHandle_t xBinarySemaphore; void EXTI1_IRQHandler(void){ BaseType_t xHigherPriorityTaskWoken; // 清除外部中断标志位 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_1); // 发送事件给目标任务, 如果该任务因此获得更高优先权则唤醒它 xSemaphoreGiveFromISR(xBinarySemaphore,&xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值