Моя цель состоит в том, чтобы иметь 38kHz прерывания и переключения светодиод, но независимо от того, что я поставил в делителем и периодПочему мой 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){}
Когда прошить его к цели, светодиод не переключает каждые 43 секунд, независимо от того, что предделитель и период установлен.
Мне что-то не хватает, но я не могу понять это. Кто-нибудь с опытом прерывания, который может помочь?
Поскольку это не весь код, нужно спросить, если HAL :: initTim на самом деле называется, и если есть другой код повторно -программировать свой таймер где-нибудь. – nos
Что такое системные часы и часы источника таймера? (частота) –
Это поможет увидеть немного больше вашего кода, в частности, инициирование часов, прерываний и таймера. – staringlizard