Инициализация таймера:
Код: Выделить всё
RCC->APB1RSTR |= RCC_APB1RSTR_TIM3RST;
__NOP();__NOP();__NOP();
RCC->APB1RSTR &= ~RCC_APB1RSTR_TIM3RST;
GPIOA->ODR &= ~( GPIO_ODR_ODR6 | GPIO_ODR_ODR7 );
GPIOA->CRL &= ~( GPIO_CRL_CNF6 | GPIO_CRL_CNF7 | GPIO_CRL_MODE6 | GPIO_CRL_MODE7 );
GPIOA->CRL |= ( GPIO_CRL_MODE6 | GPIO_CRL_CNF6_1 | GPIO_CRL_MODE7 | GPIO_CRL_CNF7_1 );
uint32_t arr = 200;
uint32_t ccr = arr/2;
uint32_t syf = 56000000;
TIM3->CR2 |= TIM_CR2_MMS_1; // TRGO trigger
TIM3->PSC = syf/arr/freq - 1;
TIM3->ARR = arr - 1;
TIM3->CCR1 = ccr;
TIM3->CCR2 = ccr;
TIM3->CCMR1 |= ( TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 ); // TIM3_CH2 PWM mode 1
TIM3->CCMR1 |= ( TIM_CCMR1_OC1M ); // TIM3_CH1 PWM mode 2
TIM3->DIER |= TIM_DIER_UIE;
TIM3->EGR = TIM_EGR_UG;
TIM3->CR1 |= TIM_CR1_ARPE;
TIM3->CCER |= ( TIM_CCER_CC1E | TIM_CCER_CC2E );
TIM3->CR1 |= TIM_CR1_CEN;
Код: Выделить всё
void TIM3_IRQHandler(void)
{
static uint8_t count = 0;
if (TIM3->SR & TIM_SR_UIF)
{
if(++count > 4)
{
count = 0;
TIM3->CCER &= ~( TIM_CCER_CC1E | TIM_CCER_CC2E );
TIM3->CR1 &= ~TIM_CR1_CEN;
}
TIM3->SR &= ~TIM_SR_UIF;
}
}


