打印
[STM32WBA]

例程中的基本定时器配置不进中断源可能的原因

[复制链接]
768|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
中断优先级配置问题
FreeRTOS 使用配置的中断优先级,如果定时器中断优先级太高,FreeRTOS 可能无法管理它。

解决方法:

确保定时器中断优先级低于 configMAX_SYSCALL_INTERRUPT_PRIORITY。

c

NVIC_SetPriority(TIMx_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 5, 0));

定时器初始化配置问题
定时器的配置是否正确,包括时钟源、预分频器、计数模式等。

解决方法:

检查定时器初始化代码,确保所有配置正确。
c

void TIM_Config(void)
{
    __HAL_RCC_TIMx_CLK_ENABLE();

    TIM_HandleTypeDef TimHandle;
    TimHandle.Instance = TIMx;
    TimHandle.Init.Period = 1000 - 1;
    TimHandle.Init.Prescaler = 8000 - 1;
    TimHandle.Init.ClockDivision = 0;
    TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
    if (HAL_TIM_Base_Init(&TimHandle) != HAL_OK)
    {
        // Initialization Error
        Error_Handler();
    }

    if (HAL_TIM_Base_Start_IT(&TimHandle) != HAL_OK)
    {
        // Starting Error
        Error_Handler();
    }
}




使用特权

评论回复
沙发
Bowclad| | 2024-7-26 11:22 | 只看该作者
一般都用默认的

使用特权

评论回复
板凳
kqh11a| | 2024-7-29 14:23 | 只看该作者
在FreeRTOS中,为了确保系统的稳定运行,必须将与FreeRTOS相关的中断优先级配置在一个特定范围内,特别是configMAX_SYSCALL_INTERRUPT_PRIORITY。

使用特权

评论回复
地板
kqh11a| | 2024-7-29 14:23 | 只看该作者
定时器中断优先级必须低于configMAX_SYSCALL_INTERRUPT_PRIORITY,否则可能会导致FreeRTOS无法管理定时器中断。

使用特权

评论回复
5
发给她更好fh| | 2024-7-31 23:21 | 只看该作者
定时器的配置必须正确,包括时钟源、预分频器、计数模式等。

使用特权

评论回复
6
flycamelaaa| | 2024-8-13 17:04 | 只看该作者
中断优先级设置错误

使用特权

评论回复
7
laocuo1142| | 2024-8-13 17:04 | 只看该作者
中断使能位未设置

使用特权

评论回复
8
powerantone| | 2024-8-13 17:04 | 只看该作者
定时器初始化配置错误

使用特权

评论回复
9
工程师犹饿死| | 2024-8-28 19:03 | 只看该作者
为了确保 FreeRTOS 能够正确管理中断,定时器中断的优先级必须低于 configMAX_SYSCALL_INTERRUPT_PRIORITY。

使用特权

评论回复
10
Wordsworth| | 2025-3-17 09:23 | 只看该作者
FreeRTOS 下面用 HAL 库的中断函数时,记得不要调用 FreeRTOS 的 API,不然可能会导致异常!

使用特权

评论回复
11
Bblythe| | 2025-3-17 09:24 | 只看该作者
STM32WBA 里面 TIM 可能挂在不同的 APB,总线时钟有没有配置对?定时器的时钟来源要确认一下。

使用特权

评论回复
12
Pulitzer| | 2025-3-17 09:25 | 只看该作者
你试过手动触发一下 TIMx->EGR |= TIM_EGR_UG; 看看中断会不会进吗?有时候初始化没触发更新事件,导致不工作。

使用特权

评论回复
13
Uriah| | 2025-3-17 09:26 | 只看该作者
HAL_TIM_Base_Start_IT 之后,NVIC 里 TIMx_IRQn 确定被使能了吗?可以手动 NVIC_EnableIRQ(TIMx_IRQn); 试试。

使用特权

评论回复
14
Clyde011| | 2025-3-17 09:27 | 只看该作者
你用的是哪个定时器?STM32WBA 里有些低功耗模式可能会影响 TIMx 的运行,看看是不是进了低功耗模式。

使用特权

评论回复
15
公羊子丹| | 2025-3-17 09:28 | 只看该作者
FreeRTOS 的中断优先级真是个坑,之前就踩过一次,调试了半天才发现是优先级太高了!

使用特权

评论回复
16
周半梅| | 2025-3-17 09:29 | 只看该作者
你这个 NVIC_SetPriority 里优先级设成 5,configMAX_SYSCALL_INTERRUPT_PRIORITY 设的是多少?确定低于它吗?

使用特权

评论回复
17
帛灿灿| | 2025-3-17 09:30 | 只看该作者
HAL_TIM_Base_Init 之后,有没有检查 TIMx->CR1 里面的 CEN 位?看看定时器是不是根本没启动。

使用特权

评论回复
18
童雨竹| | 2025-3-17 09:32 | 只看该作者
你的 Prescaler 设成 8000-1,时钟源是多少 MHz?这个配置确定能达到你想要的定时周期吗?

使用特权

评论回复
19
万图| | 2025-3-17 09:33 | 只看该作者
用 HAL_TIM_Base_Start_IT 启动定时器前,有没有先 __HAL_TIM_CLEAR_FLAG(&TimHandle, TIM_FLAG_UPDATE) ?有时候中断标志位没清,导致不触发。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

769

帖子

1

粉丝