Эта библиотека использует системный таймер, который отсчитывает по 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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_systick_v104_RUS.rar (5 Кб)
- Demo_10_Systick_RUS.rar (156 Кб)
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация