В прошлой статье были разобраны регистры таймеров TIM6 и TIM7, а также
их адреса. Следующий код содержит практический пример кода работы
таймера TIM 6.
Таймеры внутри подключены к ЦАП и могут отслеживать сигналы через свои триггеры. Основная регулировка времени срабатывания таймера зависит от настроек деления частоты, а также значения счетчика таймера. Вместе они содержат основную систему отсчета, и способны компенсировать друг друга при разных обстоятельствах.
Таймеры внутри подключены к ЦАП и могут отслеживать сигналы через свои триггеры. Основная регулировка времени срабатывания таймера зависит от настроек деления частоты, а также значения счетчика таймера. Вместе они содержат основную систему отсчета, и способны компенсировать друг друга при разных обстоятельствах.
- void TIM6_DAC_IRQHandler(void)
- {
- if ((TIM6_SR&0x1) != 0)// Проверяем чем именно было вызвано прерывание
- {
- TIM6_SR=0;// Сбрасывам прерывание, программа отработает до конца и выйдет с состояния прерывания.
- }
- *((uint32_t*)0x40020C14)=0xF000;//Зажигаем светодиоды
- for (i=0;i<1000000;i++);
- *((uint32_t*)0x40020C14)=0;
- }
- int main (void)
- {
- GPIOD_MODER=0x55000000;
- GPIOD_PUPDR=0x55000000;
- RCC_GPIO=0x8;
- RCC_TIM6=0x10;// тактирование таймера
- TIM6_PSC = 20000-1;//Деление тактовой частоты
- TIM6_CR1= 0;
- TIM6_ARR = 1000;// значение к которому будет заполнятся счетчик
- NVIC_ISER1=0x400000;/*номер прерывания = 54, значение берем из документации в таблице (регистры NVIC_ISER 32- битные, очевидно что номер прерывания 54 попадает в диапазон второго регистра NVIC_ISER1 ) */
- TIM6_DIER=0x1;//Bit 0 UIE=1: Разрешение прерывания
- TIM6_CR1|=0x1;//Bit 0 CEN: Запуск счетчика
- While(1){
- //Код работы программы
- }
- }
Комментариев нет:
Отправить комментарий