Доброго времени суток!!
Начал изучать STM32. Возникла такая проблема:
Запущен таймер (TIM3), затактирован от внешнего шим сигнала (частота входного шим 6МГц). Суть проблемы в том, что контроллер находится постоянно в прерывании от таймера, и не успевает заходить в main () для обработки. кто что может посоветовать? Часть кода см. ниже.
Настройка TIM3:
TIM3-›CR1 = 0x00000000; //по умолчанию
TIM3-›PSC = 0x00000000; //установка макс. коэф. предделителя
TIM3-›ARR = 0x0000FFFF; //установка макс. перезагружаемого знач.
TIM3-›CCMR1 = 0x00000001; //Вход IC1 связываем с TI1
TIM3-›CCER |= 0x00000000; //IC1 реагирует на нарастающий фронт
TIM3-›CCMR1 |= 0x00000200; //Вход IC2 связываем с TI1
TIM3-›CCER |= 0x00000020; //IC2 реагирует на падающий фронт
TIM3-›SMCR = 0x00000054; //Выбор TI1FP1 в качестве входа, запуск по нарастающему фронту
TIM3-›CCER |= 0x00000011; //разрешение каналов захвата
TIM3-›CR1 = 0x00000001; //разрешение таймера
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 5;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
Функция прерываний от таймера:
void TIM3_IRQHandler(void)
{
if (TIM3-›SR & TIM_SR_UIF)
{
Flag_Front=1; //флаг начала обработки значения
Time_Front=TIM3-›CCR2; // запись значания ширины импульса
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
}
}
PS: Есть подозрение что не срабатывает очистка флага таймера (TIM_ClearITPendingBit(TIM3, TIM_IT_CC1)