Тема: TIMER > OUTPUT COMPARE MODE
Сравнение вывода (output compare)
В этом режиме выбранный канал таймера будет подключен к соответствующему выводу и будет изменять его (вывода) состояние каждый раз, когда счётчик таймера досчитает до значения регистра TIM_CCRx.
void setup() {
GPIOA->regs->CRH |= 0xB0000000; // OUTPUT PA15
RCC_BASE->APB1ENR |= RCC_APB1ENR_TIM2EN; // TIM2EN > включить тактирование TIM_2 (APB1 ограничен 36 МГц | CK_PSC = 36 MHz)
RCC_BASE->APB2ENR|= RCC_APB2ENR_IOPAEN; // включить тактирование PORT_A
TIMER2_BASE->CR1 &= ~TIMER_CR1_CEN; // TIMx_CR1_CEN > стоп таймер
AFIO_BASE->MAPR = 0x02000300; // SWJ _CFG [2:0] = "010" | TIM2_REMAP = PA15 = TIM2_REMAP[1:0] = "11" >>> PA15 активен как выход, канал СН1
TIMER2_BASE->PSC = 0; // регистр предделителя 16bit
TIMER2_BASE->ARR = 1; // регистр переполнения 16bit
TIMER2_BASE->CCR1 = 1;//регистр сравнения 16 bit
TIMER2_BASE->CCMR1 = 0x00000038;// OC1M[2:0]="011" | OC1PE[3]="1"
// F(CH1) = CK_PSC/((PSC+1)*(ARR+1)) | ARR >= CCR1
// F(CH1) = 36 000 000 / ((0+1)*(1+1)) = 18 000 000 MHz
TIMER2_BASE->CCER |= TIMER_CCER_CC1E; // КАНАЛ БЛОКА СРАВНЕНИЯ
TIMER2_BASE->CR1 |= TIMER_CR1_CEN; // TIMx_CR1_CEN > старт таймер
}
void loop() {}