Question
Timer Interrupt STM32F4
Posted on June 13, 2013 at 05:44
I'm having difficulty getting a simple timer reload interupt system to work.
Once the initTimer() method is called the MCU appears to stop. Even when I comment out ''soloInd->flash();
'' Any help at all would be much appreciated. #include ''stm32f4xx_tim.h'' Indicators *soloInd; void Indicators::initTimer() { // Use Timer 5 TIMx = TIM5; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); // Initialise TimeBaseStructure with default values. TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseInit(TIMx, &TIM_TimeBaseStructure); /* Enable timer 5 capture compare Interrupt */ register_interrupt(TIM5_IRQn, Indicators::IND_IRQ_Handler); NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE); } void Indicators::IND_IRQ_Handler() { TIM5->SR &= ~TIM_SR_UIF; soloInd->flash(); } // Not sure how this method works, was already written. inline void register_interrupt(uint8_t vector_offset, void (*function)()) { ((uint32_t*)SCB->VTOR)[(uint16_t)vector_offset + 16] = (uint32_t)function; }