2023-02-13 05:04 AM
I am using STM32L412 microcontroller and doing baremetal programming for timer interrupt. I am using Timer 6 and base clock of 4MHZ is used as HCLK. However my interrupt is not firing below mentioning my code. count variable is also not updating
int main(void)
{
LedConfig();
StartTimer6();
/* Loop forever */
while(1)
{
count=1;
}
}
void LedConfig(void)
{
/*Enable Clock for Port B. */
RCC->AHB2ENR |= (1U<<1);
/*Configure GPIOB_13 as general purpose output*/
GPIOB->MODER |= (1U<<26);
GPIOB->MODER &= ~(1U<<27);
}
void StartTimer6(void)
{
RCC->APB1ENR1 |= (1U<<4);
TIM6->PSC = 1000;
TIM6->ARR = 4000;
TIM6->EGR |= (1U<<0);
TIM6->DIER |= (1U<<0);
TIM6->CR1 |= (1U<<0);
NVIC_EnableIRQ(TIM6_IRQn);
}
void TIM6_IRQHandler(void)
{
if(TIM6->SR & (1U<<0))
{
GPIOB->ODR ^= (1U<<13);
TIM6->SR &= ~(1U<<0);
}
}
Solved! Go to Solution.
2023-02-14 02:41 AM
Thanks @KnarfB as you said IRQ handler was different the actual one is TIM6_DACUNDER_IRQHandler. After I changed the handler name the code started working
2023-02-13 05:06 AM
no code, no description, no answer...
2023-02-13 05:08 AM
@KnarfB Sorry, I was entering the details.
2023-02-13 05:19 AM
And CNT register updating?
Ref.man,. talks about delay after enabling peripheral clocks, maybe
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM6EN; // set clock enable flag
volatile uint32_t dummy = RCC->APB1ENR1; // read back
(void)dummy; // avoid "unused" warning
hth
KnarfB
2023-02-13 05:23 AM
@KnarfB yes CNT is updating.
2023-02-13 05:32 AM
Any other init code before? Works "as is" on my Nucleo-STM32L432KC (LED on PB3) when started from first line in main()
hth
KnarfB
2023-02-13 05:36 AM
Nothing except the code I updated here.
2023-02-13 10:26 PM
When I tried with Timer 2 this code is working as expected, LED blinks at 1 second interval. Is the Timer 6 of STM32L412 has any additional configuration to made in order to work like this.
This is what I get when I debug.
2023-02-13 11:24 PM
This happens when the specific IRQ handler is not implemented. See the interrupt vector table in the startup code for the proper names. Guess: TIM6_DAC_IRQHandler?
hth
KnarfB
2023-02-14 02:39 AM
> See the interrupt vector table in the startup code for the proper names.
+1
I wonder where startup_stm32l412rbtx.s is from - not from https://github.com/STMicroelectronics/STM32CubeL4/tree/master/Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates
General "interrupt does not fire" troubleshooting steps here.
JW