STM32 для начинающих. Урок 3. Таймеры STM32.

Автор: | 20.08.2016

Таймеры микроконтроллеров STM32, как и таймеры других микроконтроллеров, служат для подсчета тактов. Их можно применить для генерации ШИМ, отсчета времени и так далее.

shutterstock_93437077-605x487

Источником тактов для таймеров может быть как шина тактирования микроконтроллера, к которой он подключен, так и внешний тактовый сигнал. Таймер может быть подключен к источнику тактирования напрямую, либо через предделитель, позволяющий поделить тактовую частоту в определенное количество раз. Рассмотрим на простом примере. Предположим что, таймер подключен к шине APB2, частота которой 72МГц. То есть за 1 секунду таймер досчитает до 72000000. Таймер, подключенный через предделитель на 7200, за 1 секунду досчитает до 10000, и так далее. Таймеры микроконтроллеров STM32 могут быть как 32 битными, так и 16 битными, и обладать предделителем от 1 до 65536.

Ещё почитать о таймерах можете здесь.

Процесс настройки таймеров, благодаря SPL, очень прост и удобен.

Создадим проект в Keil uVision(Как это сделать) , и добавим следующий код:

 

Читайте также  STM32.Bluetooth и Android.

Подробнее почитать о том что происходит в функциях Init_GPIO и Init_RCC, Вы можете здесь и здесь.

Сейчас мы поговорим только лишь о функции Init_Timer и соответствующем прерывании.

Разберем функцию Init_Timer пошагово. Сначала объявляется структура TIM_TimeBaseInitTypeDef, содержащая в себе настройки таймера. После этого, командой RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE) мы включаем тактирование таймера 2, подключенного к шине APB1. Командой TIM_TimeBaseStructInit (&timer2), инициализируем структуру настройки таймера. Затем выбираем предделитель равный 7200 и период 10000, что подразумевает под собой отсчет времени в 1 секунду. Делаем мы это командами timer2.TIM_Prescaler = 7200 и timer2.TIM_Period = 10000. Далее, настраиваем таймер TIM2, согласно заполненной структуре командой TIM_TimeBaseInit (TIM2,&timer2).

После настройки таймера, необходимо разрешить соответствующее прерывание, которое будет генерироваться по истечении 1 секунды. Делаем это командой NVIC_EnableIRQ(TIM2_IRQn), разрешающей прерывания TIM2_IRQ, и командой TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE), разрешающей генерацию прерывания таймером. После этого включаем таймер командой TIM_Cmd(TIM2,ENABLE).

В функции обработчике прерывания TIM2_IRQHandler, мы производим переключение соответствующего светодиода, путем команд GPIO. Однако перед этим, мы проверяем, действительно ли прерывание вызвано таймером 2. А после, переключения светодиода, запускаем новый отсчет таймера, командой TIM_ClearITPendingBit(TIM2,TIM_IT_Update).

Таким образом, мы настроили таймер 2, на отсчет 1 секунды. Как применить эти знания — решать вам, потому что таймеры открывают богатые возможности перед разработчиком электронных устройств.

Комментарии и замечания оставляйте ниже.

Спасибо за внимание, в следующем уроке поговорим о прерываниях.

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

STM32 для начинающих. Урок 3. Таймеры STM32.: 1 комментарий

  1. Уведомление: STM32. Bluetooth Android. HC-05. | MKPROG.RU

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *