Все просто - вектор и его обработчик:
0, /*!%5 RCC */ exti0_irq_handler, /*!%6 EXTI Line0 */ 0, /*!%7 EXTI Line1 *//* exti0 irq handler */void exti0_irq_handler(void) { if (EXTI->PR | EXTI_PR_PR0) { /* change pwm submode for tim4 ccch2,4 */ TIM4->CCMR1 ^= TIM_CCMR1_OC2M_0; TIM4->CCMR2 ^= TIM_CCMR2_OC4M_0; /* clear pending irq */ EXTI->PR |= EXTI_PR_PR0; /* disable exti0 interrupt */ EXTI->IMR &= ~EXTI_IMR_MR0; }}В обработчике мы вместо изменения состояния светодиодов сменяем режим ШИМа - с прямого на обратны и наоборот для каналов 2 и 4. По сути т.к. переклюлючение светодиодов происходит на половине периода таймера, то происходит сдвиг фаз мигания.