中断优先级配置问题
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();
}
}
|