При инициализации, выполняется вот такое:
Code: Select all
TIM2->PSC = 24 - 1; // 1us/tick
TIM2->DIER = TIM_DIER_UIE;
TIM2->ARR = period;
TIM2->CCR1 = pw;
TIM2->CCR2 = pw + timeout_us;
NVIC_EnableIRQ(TIM2_IRQn);
TIM2->CR1 = TIM_CR1_CEN;
Обработчик прерывания выглядит вот так:
Code: Select all
extern "C" void TIM2_IRQHandler();
void TIM2_IRQHandler()
{
TurnOn( TEST_PIN );
TurnOff( TEST_PIN );
TIM2->SR = 0;
}
Сначала, я подумал, что задеваю какие-то зарезервированные биты. Поэтому, сделал как в STMовской библиотеке:
Code: Select all
TIM2->SR = (uint16_t)~TIM_IT_Update;Code: Select all
TIM_ClearITPendingBit(TIM2, TIM_IT_Update);Code: Select all
extern "C" void TIM2_IRQHandler();
void TIM2_IRQHandler()
{
TurnOn( TEST_PIN );
TurnOff( TEST_PIN );
TIM2->SR = 0;
Nop();
Nop();
}
Кто-нибуть сталкивался с таким?