我的目标是有中断38KHZ和切换一个LED,但不管如何我设置为预分频器和周期为什么我的STM32F7每43秒只中断一次?
static TIM_HandleTypeDef s_TimerInstance = {
.Instance = TIM2,
};
void Hal::initTim()
{
__TIM2_CLK_ENABLE();
s_TimerInstance.Init.Prescaler = 96; // This does nothing
s_TimerInstance.Init.CounterMode = TIM_COUNTERMODE_UP;
s_TimerInstance.Init.Period = 26; // This does nothing
s_TimerInstance.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&s_TimerInstance);
HAL_TIM_Base_Start_IT(&s_TimerInstance);
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
}
extern "C" void TIM2_IRQHandler()
{
HAL_TIM_IRQHandler(&s_TimerInstance);
}
extern "C" void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_GPIO_TogglePin(GPIOI, GPIO_PIN_1); // Happens every 43 seconds for some reason
}
extern "C" void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim){}
extern "C" void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef *htim){}
当我闪它的目标时,LED每43秒切换无论什么分频器和期间设定为。
我必须错过一些东西,但我无法弄清楚。任何有中断经验的人都可以帮忙?
因为这不是所有的代码,我们需要问,如果HAL :: initTim实际上是调用,以及是否有其他的代码重用 - 在某处编程你的计时器。 – nos
什么是系统时钟和定时器的源时钟? (频率) –
这将有助于查看更多的代码,特别是时钟,中断和计时器的启动。 – staringlizard