Главная » Микроконтроллеры
Призовой фонд
на октябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

STM32F4. Урок 10 - Программные таймер и счетчик

Эта библиотека использует системный таймер, который отсчитывает по 1мкс(или 1мс) и обрабатывает прерывание. Данная библиотека позволяет реализовать различные паузы (в микросекундах, миллисекундах и секундах). Библиотека позволяет запускать и опрашивать циклически два программных таймера(теоретически может быть запущенно любое количество таймеров). Программные счетчики позволяют измерять промежутки времени. Счетчик запускается с 0 отметки и может быть запрошен в некоторой точке, получив пройденное время (в микросекундах, миллисекундах и секундах).

Требования:

   Подключаемые модули CooCox-IDE: отсутствуют.
   Поддерживаемые библиотеки: отсутствуют.

Перечисления:

typedef enum {
    TIMER_STOP =0,  // Таймер остановлен и сброшен
    TIMER_START_us, // Таймер запущен в режиме микросекунд
    TIMER_START_ms, // Timer запущен в режиме миллисекунд
    TIMER_START_s,  // Timer запущен в режиме секунд
    TIMER_CHECK     // Проверка окончания работы таймера
}TIMER_STATUS_t;

typedef enum {
  TIMER_HOLD =0,  // Таймер закончил работу
  TIMER_RUN       // Таймер работает
}TIMER_CHECK_t;

typedef enum {
    COUNTER_STOP =0,  // Счетчик остановлен
    COUNTER_START_us, // Счетчик запущен в режиме микросекунд
    COUNTER_START_ms, // Счетчик запущен в режиме миллисекунд
    COUNTER_START_s,  // Счетчик запущен в режиме секунд
    COUNTER_CHECK     // Проверка, сколько времени прошло
}COUNTER_STATUS_t;
 

Функции:

void UB_Systick_Init(void);                                            // инициализация системного таймера
void UB_Systick_Pause_us(__IO uint32_t pause);                         // прерывание на X мкс
void UB_Systick_Pause_ms(__IO uint32_t pause);                         // прерывание на X мс
void UB_Systick_Pause_s(__IO uint32_t pause);                          // прерывание на X с
TIMER_CHECK_t UB_Systick_Timer1(TIMER_STATUS_t status, uint32_t wert); // Получение данных от Timer1
TIMER_CHECK_t UB_Systick_Timer2(TIMER_STATUS_t status, uint32_t wert); // Получение данных от Timer2
uint32_t UB_Systick_Counter1(COUNTER_STATUS_t status);                 // Получение данных от Counter1
uint32_t UB_Systick_Counter2(COUNTER_STATUS_t status);                 // Получение данных от Counter2
 

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 22.02.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der Systick-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_systick.h"
#include "stm32_ub_led.h"

int main(void)
{
  SystemInit(); // Инициализация настроек кварца

  UB_Systick_Init(); // Инициализация системного счетчика

  UB_Led_Init(); // Инициализация светодиодов


  while(1)
  {
    // 200мс пауза (по системному счетчику)
    UB_Systick_Pause_ms(200);
    // переключение светодиода
    UB_Led_Toggle(LED_GREEN);

    // Проверка окончания работы таймера
    if(UB_Systick_Timer1(TIMER_CHECK,0)==TIMER_HOLD) {
      // переключить светодиод
      UB_Led_Toggle(LED_RED);
      // запуск таймера (на 800мс)
      UB_Systick_Timer1(TIMER_START_ms,800);
    }
  }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Осциллограф DSO138 200 Вт усилитель класса D на IRS2092
вверх