Для работы дальномера нужно отправлять на одну из его ног сигнал длинной по времени 10мкс не чаще чем через каждые 50мс, вначале я реализовал эту работу просто по задержке на таймере
delay(50000);
GPIOB->ODR |= GPIO_ODR_ODR1;
delay(10);
GPIOB->ODR &= ~GPIO_ODR_ODR1;
Но для этого нужно постоянно вызывать функцию для измерения, я решил реализовать эту работу с помощью ШИМ
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = SystemCoreClock / 1000000 -1; //отстчет каждую 1мкс
TIM3->ARR = 60000; //период 60мс
TIM3->CCR4 = 10; //время импульса 10мкс
TIM3->CCMR2 |= TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2;
TIM3->CCER |= TIM_CCER_CC4E;
TIM3->CR1 |= TIM_CR1_CEN;
но возникла проблема, что он делает всего одно измерение и больше не хочет, только если перезапустить устройство или дебаг то он опять сделает одно измерение и постоянно только его и выводит. Я мог где-то накосячить в работе с ШИМ?