к1986ве92fi настройка таймера 2 с прерываниями
к1986ве92fi настройка таймера 2 с прерываниями
void TIMER2_Init(void) { TIMER_CntInitTypeDef cntInit; // 1. Включаем тактирование RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER2, ENABLE); // 2. Сброс таймера TIMER_DeInit(MDR_TIMER2); // 3. Настройка счётчика TIMER_CntStructInit(&cntInit); cntInit.TIMER_IniCounter = 0; cntInit.TIMER_Prescaler = 7200; // 72 МГц / 7200 = 10 кГц cntInit.TIMER_Period = 1000; // 10 кГц / 1000 = 10 Гц (0.1 сек) cntInit.TIMER_CounterMode = TIMER_CntMode_ClkFixedDir; cntInit.TIMER_CounterDirection = TIMER_CntDir_Up; cntInit.TIMER_EventSource = TIMER_EvSrc_TIM_CLK; cntInit.TIMER_FilterSampling = TIMER_FDTS_TIMER_CLK_div_1; cntInit.TIMER_ARR_UpdateMode = TIMER_ARR_Update_Immediately; cntInit.TIMER_ETR_FilterConf = TIMER_Filter_1FF_at_TIMER_CLK; cntInit.TIMER_ETR_Prescaler = TIMER_ETR_Prescaler_None; cntInit.TIMER_ETR_Polarity = TIMER_ETRPolarity_NonInverted; cntInit.TIMER_BRK_Polarity = TIMER_BRKPolarity_NonInverted; TIMER_CntInit(MDR_TIMER2, &cntInit); // 4. Настройка делителя частоты TIMER_BRGInit(MDR_TIMER2, TIMER_HCLKdiv16); // 5. Разрешение прерывания по переполнению (ARR) TIMER_ITConfig(MDR_TIMER2, TIMER_STATUS_CNT_ARR_EVENT, ENABLE); // 6. Включение прерывания в NVIC NVIC_EnableIRQ(Timer2_IRQn); // 7. Запуск таймера TIMER_Cmd(MDR_TIMER2, ENABLE); } // Обработчик прерывания таймера 2 void Timer2_IRQHandler(void) { if (TIMER_GetITStatus(MDR_TIMER2, TIMER_STATUS_CNT_ARR_EVENT)) { TIMER_ClearITPendingBit(MDR_TIMER2, TIMER_STATUS_CNT_ARR_EVENT); timer2_flag = 1; } } void ProcessTimer2(void) { if (timer2_flag) { timer2_flag = 0; LED_On(); Delay(1000); LED_Off(); } }