Professional Documents
Culture Documents
Cấu hình Timer2 chế độ ngắt (delay)
Cấu hình Timer2 chế độ ngắt (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); } }
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); }