Перейти к содержанию
    

HAL и таймер TIM6. STM32f100C8T6B

Keil 5. Код сгенерирован STM32CubeMX. Проблема в прерывании таймера TIM6 по переполнению.

Вход в прерывание "void TIM6_DAC_IRQHandler(void)", происходит с правильным периодом, согласно настройке таймера.

А, вот вызов функции "void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim6)" и попадание в нее, происходит очень быстро, не соответствует периоду таймера. Данная функция, если правильно понял, предназначена для размещения кода по прерыванию от таймера.

Не могу понять почему так происходит. В общем первый раз столкнулся с HAL. Есть мысль все запихнуть в прерывание "void TIM6_DAC_IRQHandler(void)", и бросить мучится с HAL_TIM_PeriodElapsedCallback.

После Reset, попадаем в функцию HAL_TIM_PeriodElapsedCallback, почти мгновенно, следующий раз правильно, потом снова мгновенно, постоянно.

post-20377-1510158632_thumb.jpg

post-20377-1510158669_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все оказалось проще. Привык с AVR... При отладке, таймер не останавливается! Когда при отладке встаем по прерыванию, таймер продолжает независимо работать.

Проблема в этом: Debug MCU configuration register (DBGMCU_CR) . На время отладки необходимо выключать используемые таймеры в регистре DBGMCU_CR.

post-20377-1510206610_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...