Что-то я застрял, прошу помощи

Выдавал ШИМ на TIM2_CH2. Потом стало надо выдавать на TIM4_CH4. Переделал инициализацию, а оно не работает. Вот код:
Код
void init_t4_ch4()
{
// enable port B and AFIO peripherals
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
// enable TIM4 peripheral
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
// configure B9 to alternative output mode
GPIOB->CRH = (GPIOB->CRH & ~(0x0F<<4)) | (0x0B<<4);
// set up timer
TIM4->CR1 = TIM_CR1_ARPE; // count up to ARR, no divisor, auto reload
TIM4->ARR = 36; // period
TIM4->PSC = 0; // prescaler
TIM4->EGR = TIM_EGR_UG; // generate an update event to reload the prescaler value immediately
TIM4->CR2 = 0;
// set up compare (ch4)
TIM4->CCER &= ~(TIM_CCER_CC4E | TIM_CCER_CC4P); // disable cc4 output, clear polarity
TIM4->CCR2 = 18; // cc4 period
TIM4->CCMR2 &= 0x00FF;
TIM4->CCMR2 |=
TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1 // PWM 1 (0x6000)
| TIM_CCMR2_OC4PE // enable preload;
;
TIM4->CCER |= TIM_CCER_CC4E; // enable cc4 output
TIM4->CR1 |= TIM_CR1_CEN; // run timer
}
{
// enable port B and AFIO peripherals
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
// enable TIM4 peripheral
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
// configure B9 to alternative output mode
GPIOB->CRH = (GPIOB->CRH & ~(0x0F<<4)) | (0x0B<<4);
// set up timer
TIM4->CR1 = TIM_CR1_ARPE; // count up to ARR, no divisor, auto reload
TIM4->ARR = 36; // period
TIM4->PSC = 0; // prescaler
TIM4->EGR = TIM_EGR_UG; // generate an update event to reload the prescaler value immediately
TIM4->CR2 = 0;
// set up compare (ch4)
TIM4->CCER &= ~(TIM_CCER_CC4E | TIM_CCER_CC4P); // disable cc4 output, clear polarity
TIM4->CCR2 = 18; // cc4 period
TIM4->CCMR2 &= 0x00FF;
TIM4->CCMR2 |=
TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1 // PWM 1 (0x6000)
| TIM_CCMR2_OC4PE // enable preload;
;
TIM4->CCER |= TIM_CCER_CC4E; // enable cc4 output
TIM4->CR1 |= TIM_CR1_CEN; // run timer
}
А вот для сравнения рабочий код с TIM2_CH2:
Код
void init_t2_ch2()
{
// enable port A and AFIO peripherals
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
// enable TIM4 peripheral
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
// configure A1 to alternative output mode
GPIOA->CRL = (GPIOA->CRL & ~(0x0F<<4)) | (0x0B<<4);
// set up timer
TIM2->CR1 = TIM_CR1_ARPE; // count up to ARR, no divisor, auto reload
TIM2->ARR = 36; // period
TIM2->PSC = 0; // prescaler
TIM2->EGR = TIM_EGR_UG; // generate an update event to reload the prescaler value immediately
TIM2->CR2 = 0;
// set up compare (ch4)
TIM2->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P); // disable cc4 output, clear polarity
TIM2->CCR2 = 18; // cc4 period
TIM2->CCMR1 &= 0x00FF;
TIM2->CCMR1 |=
TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 // PWM 1 (0x6000)
| TIM_CCMR1_OC2PE // enable preload;
;
TIM2->CCER |= TIM_CCER_CC2E; // enable cc4 output
TIM2->CR1 |= TIM_CR1_CEN; // run timer
}
{
// enable port A and AFIO peripherals
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
// enable TIM4 peripheral
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
// configure A1 to alternative output mode
GPIOA->CRL = (GPIOA->CRL & ~(0x0F<<4)) | (0x0B<<4);
// set up timer
TIM2->CR1 = TIM_CR1_ARPE; // count up to ARR, no divisor, auto reload
TIM2->ARR = 36; // period
TIM2->PSC = 0; // prescaler
TIM2->EGR = TIM_EGR_UG; // generate an update event to reload the prescaler value immediately
TIM2->CR2 = 0;
// set up compare (ch4)
TIM2->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P); // disable cc4 output, clear polarity
TIM2->CCR2 = 18; // cc4 period
TIM2->CCMR1 &= 0x00FF;
TIM2->CCMR1 |=
TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 // PWM 1 (0x6000)
| TIM_CCMR1_OC2PE // enable preload;
;
TIM2->CCER |= TIM_CCER_CC2E; // enable cc4 output
TIM2->CR1 |= TIM_CR1_CEN; // run timer
}
Первый не работает, второй - работает. Где я что забыл?