Skip to content

Instantly share code, notes, and snippets.

@futurelink
Created April 19, 2020 16:02
Show Gist options
  • Select an option

  • Save futurelink/49f269e39c80341a42e3c94a556ecfc5 to your computer and use it in GitHub Desktop.

Select an option

Save futurelink/49f269e39c80341a42e3c94a556ecfc5 to your computer and use it in GitHub Desktop.
/**
* Настройка таймера для генерации N импульсов
* указанного периода и указанной скважностью.
* Период задается регистром ARR, кол-во импульсов RCR
* и скважность задается CCR1. Импульсы выводятся на
* соответствующую ногу микросхемы.
*/
void TIM1_Config() {
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // Enable TIM1
/* Настройка таймера 1 */
TIM1->PSC = TIMER_PRESCALER; // Прескейлер таймера константа
TIM1->CR1 &= ~(
TIM_CR1_DIR | TIM_CR1_CMS | // Сбрасываем направление счета
TIM_CR1_CKD // Отключаем деление частоты
);
TIM1->CR1 |= (
TIM_COUNTERMODE_UP | // Выставляем направление счета вверз
TIM_CLOCKDIVISION_DIV1 | // Выставляем деление частоты на 1
TIM_CR1_OPM // Включаем вывод в порт
);
TIM1->CCMR1 &= ~(TIM_CCMR1_OC1M | TIM_CCMR1_CC1S); // Сбрасывваем режим работы канала 1
TIM1->CCMR1 |= TIM_OCMODE_PWM2; // Включить загрузку и ШИМ
TIM1->CCER &= (uint16_t) ~TIM_CCER_CC1P;
TIM1->CCER |= (
TIM_OCPOLARITY_HIGH | // Полярность - высокий уровень
TIM_CCER_CC1E // Разрешаем выход канала 1
);
TIM1->BDTR |= TIM_BDTR_MOE; // Разрещаем выходы таймера
TIM1->ARR = 0; // ВЫставляем начальные значения
TIM1->RCR = 0; // счетных регистров в нули.
TIM1->CCR1 = 0;
TIM1->EGR |= TIM_EGR_UG; // Включаем генерацию события Update Event (после RCR!)
TIM1->DIER |= TIM_DIER_UIE; // Генерим прерывание по Update Event
TIM1->CR1 &= ~TIM_CR1_CEN; // Запрещаем работу таймера, он должен включаться потом
NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0);
NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment