You are on page 1of 3

Cu hnh Timer2 ch ngt (delay)

void TIM2_Config(void) { /*PCLK1_CLK = HCLK/4 = 18 MHz*/ /* TIM2_CLK = SystemCoreClock/2 = 72/2 = 36 MHz; OR TIM2_CLK = PLCK1_CLK*2 = 18*2=36MHz (APB1_Prescaler = 16 ==> x2) The objective is to get TIM2 counter clock at 1 KHz: - Prescaler = (TIM2CLK / TIM2 counter clock) - 1 TIM2 Counter CLK = 1000 Hz; CCR2_Val = 500; TIM2_CH1 delay = CCR2_Val/TIM2 counter clock = 500 ms Timer 2 Freq = 2Hz */ /*TIM2 overflow every 1s*/ /* Compute the prescaler value */ PrescalerValue = (uint16_t)(SystemCoreClock/2000)-1; /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 499; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /*******************************************************************************/ /* Output Compare Timing Mode configuration */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR2_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM2, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2, ENABLE); /* TIM IT enable */ TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); /*******************************************************************************/ //TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable); //TIM_ARRPreloadConfig(TIM2, ENABLE); /* TIM IT enable */ //TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); /* TIM2 enable counter */ TIM_Cmd(TIM2, ENABLE); }

Hm x l ngt timer 2
void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); LEDToggle(LED1); capture = TIM_GetCapture2(TIM2); TIM_SetCompare2(TIM2, CCR2_Val); printf("\n\r Times = %d",capture); } }

Cu hnh Timer2 ch PWM chn PA1, channel1


void TIM2_PWM_Config(void) { /* -------------------------------------------------------------Test 10kHz TIM2 Configuration: generate 1 PWM signals: PCLK1 = HCLK/4 = 72MHz / 4 = 18 MHz APB1 prescaler = 4 # 1 => TIM2CLK = PCLK1x2 = 36 MHz = SystemCoreClock/2, => TIM2 counter clock = TIM2CLK/Prescaler = 1Mhz Prescaler = 36-1; Prescaler = (TIM2CLK / TIM2 counter clock) - 1 TIM2 ARR Register = 99 => TIM2 Frequency = TIM2 counter clock/(ARR + 1) =1mhz / 100= 10kHz TIM2 Frequency = 10kHz. TIM2 Channel2 duty cycle = (TIM2_CCR2 / TIM2_ARR)* 100 = (CCR2_Val / (ARR + 1))* 100 = 50% => CCR2_Val = 50; ------------------------------------------------------------------- */ /* Time base configuration */ PrescalerValue = (uint16_t)(SystemCoreClock/2000000)-1; TIM_TimeBaseStructure.TIM_Period = 99; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 50;/* set CCR2_Val= 50; */

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM2, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); /* TIM2 enable counter */ TIM_Cmd(TIM2, ENABLE); }

Hm cu hnh chn PA1


void TIM2_chanel1_config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Configure pin PA.8 as output, push pull*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); }

You might also like