Здравствуйте, Уважаемые!
Основная задача была создать таймером в режиме PWM изменяющийся (периодический) сигнал. Для этого был использован таймер TIM1 (там есть такая приятность как DeadTime). Алгоритм таков:
1) Настраивается второй компаратор и его инверсный выход таймера
2) Настраивается автоперезагрузка таймера и прерывание по этому событию.
3) Каждый раз по прерыванию в регистр сравнения TIM1->CCR2 записывается новое значение (до которого будет считать таймер и где переключится нога)
И в некоторых случаях происходит такая странность, причину которой найти не удается. Таймер переключается раньше положеного (когда TIM1->CNT < TIM1->CCR2 ), находится в этом состоянии некоторое время, переключается обратно и срабатывает повторно уже в нужный момент (когда TIM1->CCR2 равен TIM1->CNT). Происходит это передергивание не во всех случаях, а при некоторых значениях TIM1->CCR2 и определенной разнице между предыдущим значением этого регистра и текущим. Если таймер считает в режиме UP_Counting /| , то передергивание происходит незадолго до верного переключения (т.е. перед переключением); если счет идет в UP_DOWN режиме /\ , то оно происходит в конце, после правильного переключения.
На фото картинка с осциллографа (прямой и инверсный выходы).
На прерывание не грешу, потому как если разниц между точками не велика, этого "артефакта" нет.
Если кто-то сталкивался или у кого есть идеи - подскажите пожалуйста. Проц.: STM32F205, STM32F207.