тут небольшой вопрос хотел бы уточнить, чтоб новой темы не создавать.
вот например использую я TIM3, хочу чтобы на выходе чипа был сигнал с периодом 7.5мс, т.е. 3.75мс 1, и 3.75мс 0. Или 50% дуты цыцле.
вот код моей настройки таймера:
Код
// enable TIM3 clock
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
// set the Auto Reload Register
// PWM_period = Needed period / (1/TIM_frequency)
TIM3->ARR = 15000; // PWM_period = 7.5ms / (1/2MHz)
// set the prescaler
TIM3->PSC = 20; // f_cnt = 42MHz / (PSC + 1) = 2MHz
// clear CR2
TIM3->CR2 = 0;
TIM3->CCR1 = 7500; // 50% duty cycle
// set output compare mode 1.
TIM3->CCMR1 |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;
// enable Output compare
TIM3->CCER |= TIM_CCER_CC1E;
// enable TIM3
TIM3->CR1 |= TIM_CR1_CEN;
тут такое дело, ведь если я делю 42МГц клок на 21, и получаю 2МГц, а следовательно этот клок и является клоком таймера, то чтобы получить период в 7.5мс мне нужно чтобы счетчик посчитал до 15000, т.к. 1 клок - (1/2МГц = 0.5мкс), но а 15000 клоков это 7.5мс.
я загружаю в ARR 15000, ну а в CCR1 7500, т.к. мне 50% нужно.
Но почему я на выходе на осциллографе вижу сигнал с периодом 3.75мс, 50%, т.е. в два раза ровно быстрее?
ведь выбран режим: считать вверх, и счет идет каждые 0.5мкс (2МГц клок после деления 42МГц на 21)
что я тут упустил?