Основной блок таймера состоит из:
Регистр автозагрузки является предзагруженным. Т.е. при операциях с ним происходит чтение/запись копии. Запись этого значения в теневой регистр происходит либо мгновенно, либо по событию обновления. Тактирование счетчика осуществляется ч/з предделитель. Регистр предделителя 16-битный и позволяет заносить в него любое значение от 0 до 65535. Это свойство позволяет гибко настраивать частоту для таймера. Фактическое же значение предделителя получается значение регистра TIMx_PSC + 1.
Вот пример работы таймера при настройка по умолчанию(предделитель равен 1):
При изменение частоты предделителя, происходит задержка в то количество тактов которое равно новому значению пределителя (в примере происходит смена делителя со значения 0 в значение 1):
Для начала создадим новый проект:
nis@jane ~/stm32/f4examples/05-timers $ cp -a 00-base/ 01-ints-if-overflow
nis@jane ~/stm32/f4examples/05-timers $ cd 01-ints-if-overflow/
Начнем с определения прерываний и обработчиков в файле startup.c.
Также необходимо добавить инициализацию портов и прерываний в файле work.c.
Соберем проект и загрузим его в МК:
nis@jane ~/stm32/f4examples/05-timers/01-ints-if-overflow $ make write
Далее можно наблюдать видео работы кода:
Итак, в этом проекте мы использовали одно из многих свойств таймера - обновление и генерация событий при этом обновлении.