Developer от Бога

DV

четверг, 6 июля 2017 г.

STM32. Код работы таймера Basic TIM 6

В прошлой статье были разобраны регистры таймеров TIM6 и TIM7, а также их адреса. Следующий код содержит практический пример кода работы таймера TIM 6.
Таймеры внутри подключены к ЦАП и могут отслеживать сигналы через свои триггеры. Основная регулировка времени срабатывания таймера зависит от настроек деления частоты, а также значения счетчика таймера. Вместе они содержат основную систему отсчета, и способны компенсировать друг друга при разных обстоятельствах.

  1.  void TIM6_DAC_IRQHandler(void)
  2. {
  3. if ((TIM6_SR&0x1) != 0)// Проверяем чем именно было вызвано прерывание
  4. {
  5. TIM6_SR=0;// Сбрасывам прерывание, программа отработает до конца и выйдет с состояния прерывания.
  6. }
  7. *((uint32_t*)0x40020C14)=0xF000;//Зажигаем светодиоды
  8. for (i=0;i<1000000;i++);
  9. *((uint32_t*)0x40020C14)=0;
  10. }
  11. int main (void)
  12. {
  13. GPIOD_MODER=0x55000000;
  14. GPIOD_PUPDR=0x55000000;
  15. RCC_GPIO=0x8;
  16. RCC_TIM6=0x10;// тактирование таймера
  17. TIM6_PSC = 20000-1;//Деление тактовой частоты
  18. TIM6_CR1= 0;
  19. TIM6_ARR = 1000;// значение к которому будет заполнятся счетчик
  20. NVIC_ISER1=0x400000;/*номер прерывания = 54, значение берем из документации в таблице (регистры NVIC_ISER 32- битные, очевидно что номер прерывания 54 попадает в диапазон второго регистра NVIC_ISER1 ) */
  21. TIM6_DIER=0x1;//Bit 0 UIE=1: Разрешение прерывания
  22. TIM6_CR1|=0x1;//Bit 0 CEN: Запуск счетчика
  23. While(1){
  24. //Код работы программы
  25. }
  26. }

Комментариев нет:

Отправить комментарий