Skip to main content
Nmo.1
Associate III
June 13, 2020
Question

STM32 timer3

  • June 13, 2020
  • 2 replies
  • 729 views

Hi everyone. I wrote this code to run the stm32f0 timer3, which toggle 2 LEDs at a time, but it doesn't work.

Can anyone please help me؟

void TIM3_Init()
{
	 TIM_TimeBaseInitTypeDef TIM3_InitStructure;
		 NVIC_InitTypeDef NVIC_InitStructure;
 
 RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);
		 TIM3_InitStructure.TIM_Prescaler = 359;
		 TIM3_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
		 TIM3_InitStructure.TIM_Period = 199;
		 TIM3_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
		 TIM3_InitStructure.TIM_RepetitionCounter = 0;
		 TIM_TimeBaseInit(TIM3, &TIM3_InitStructure);
 
 TIM_Cmd(TIM3, ENABLE);
 
 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
		 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	 NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
	 NVIC_Init(&NVIC_InitStructure);
 
		 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
 
 
}
 
void TIM3_IRQHandler(void)
{
 
	if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
 
 TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
		GPIOB->ODR ^= GPIO_Pin_2|GPIO_Pin_3;
 
 
	}
}

This topic has been closed for replies.

2 replies

waclawek.jan
Super User
June 13, 2020

Read out and check/post the TIM and relevant GPIO registers content.

JW

Michal Dudka
Lead
June 13, 2020

Line:

RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);

is wrong. You want call function:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

to enable clock ! For next similar issues i suggest to do thist "checklist":

  1. Check if "non working" peripheral has clock enabled
  2. Check if used GPIOs has clock enabled
  3. Check if used GPIOs are configured as proper alternate function
  4. Check if you are looking at right GPIOs