PROGCONT.RU

Вход Регистрация
О САЙТЕ ГЛАВНАЯ
 

Основа всех таймеров или Basic timers(основной таймер), теория.

 Общая тема для STM8S и STM32F, изучение начнём с теории настройки основы таймеров или они же Basic timers у которых имеется только базовые элементы(имеются у всех таймеров) и по этому могут выполнять только одну функцию счётчика, а также объясню в этой статье о всех нюансах работы с регистрами предделителя(Prescaler), счётчика(Counter) и автоматически-перегружаемый регистр(Auto-reload), которые так же имеются у всех более продвинутых таймеров.

 Схема таймера.

нет рисунка

 Из за простоты таймер можно использовать только для отсчёта времени, он состоит из минимального количества элементов это:
   1) триггер контроллер(Trigger controller) который управляет сбросом, включением таймера и запуска счётчика;
   2) предделитель(Prescaler) счётчика таймера;
   3) счётчик(Counter), выполняет счёт сигналов из предделителя;
   4) автоматически-перегружаемый регистр(Auto-reload Register), управляет счётчиком в зависимости от режима работы таймера, если включен режим однократного счёта(One-pulse) то при достижении счётчика до результата который находится в этом регистре(был записан заранее) будет сгенерировано событие, вызвано прерывание если включено и остановлен таймер. В выключенном однократном режиме(по умолчанию) при достижение счётчика до значения в перегружаемом регистре будет также вызвано событие, прерывание но таймер не остановится, будет сброшен счётчик и счёт начнётся заново.


 Теперь конкретно о том как правильно настроить таймер для отсчёта нужного промежутка времени.
 Начнём с предделителя(Prescaler), назначение его делить входные импульсы например как данном варианте от системного тактирования контроллера для счётчика(Counter), что бы увеличить отсчитываемый промежуток времени если не хватит максимального значения регистра счётчика(65535). В итоге можно получить максимальное отсчитываемое значение это максимальное значение предделителя умножить на максимальное значение счётчика плюс один получаем 65535*(65535+1)=4294901760. Не забываем или если кто не знал, по умолчание в предделителе значение 0, что означает делитель равный 1 то есть число на которое делятся входные сигналы будет значение его плюс один. Пример, если нам нужно, что бы счётчик считал каждый десятый входной импульс то значение предделителя должно быть 10-1=9.


 И про особенность, о работе всех таймеров про которую вы должны знать, если таймер работает в круговом режиме(не однократном режиме) то для перехода счётчика в нулевое значение после достижения до значения записанного в автоматически-перегружаемый регистр ему потребуется дополнительный импульс с предделителя, в итоге только при первом отсчёте получим нужный промежуток времени во всех остальных будет добавлен этот дополнительный такт который вы должны учитывать.
 Смотрите в анимированном примере.
 

нет рисунка


 Осталось рассказать о функции буферизации автоматически-перегружаемого регистра которая может включатся в специальном регистре управления, данную функцию можно использовать только в непрерывном режиме работы таймера для гарантированной перезаписи данного регистра новым значением после отработки старого и для этого используется дополнительный теневой регистр или буфер.
 Если будет включена функция буферизации то записав значение в автоматически-перегружаемый регистр оно с начало попадёт в теневой и только после достижения счётчика нужного значения, из теневого будет помещён в автоматически-перегружаемый регистр. При первом старте таймера сразу произойдёт событие, если включено то и прерывание так как в счётчике и в автоматически-перегружаемом регистре будет нулевое значение, потом только всё отработает как надо.
 Смотрите в анимированном примере.
 

нет рисунка


 Внимание! В автоматически-перегружаемый регистр и соответственно теневой нельзя записывать нулевое значение, приведёт к зависанию контроллера, что не допустимо.


 Далее будут отдельные статьи для STM8S и STM32F где будет показано как на практике настроить эти Basic timers и продолжим изучение более продвинутых таймеров с их функциями.

Статья №49 Дата:27/02/2020

Комментарии.