Отсчет времени в STM32Cube

STMicroelectronics выпускает библиотеку STM32Cube для своих микроконтроллеров. Эта библиотека пришла на смену Standard Peripherals Library и содержит новые особенности.

Одна из особенностей — это отсчет времени. Благодаря ему библиотека может устанавливать время ожидания в операциях ввода/вывода.

Время считается в миллисекундах и хранится в беззнаковой целочисленной 32-битной переменной:

static __IO uint32_t uwTick;

Максимальное значение, которое может принимать эта переменная, равно 2^{32}-1. Что соответствует 49 суткам 17 часам 2 минутам 47 секундам и 295 миллисекундам.

Можно убедится:

49\cdot24\cdot60\cdot60\cdot1000+17\cdot60\cdot60\cdot1000+2\cdot60\cdot1000+47\cdot1000+295=\newline=4294967295

2^{32}-1=4294967295

Пользователю предоставляются две полезные функции:

  • uint32_t HAL_GetTick (void)
    Возвращает время в миллисекундах.
  • void HAL_Delay (uint32_t Delay)
    Создает задержку на заданное количество миллисекунд.

Отсчет времени запускается при инициализации библиотеки, вызовом функции HAL_Init().

Для отсчета времени используется таймер SysTick, который встроен в ядро Cortex-M. Функция HAL_Init() настраивает таймер так, чтобы он генерировал прерывание каждую миллисекунду. В обработчике прерывания SysTick (в функции SysTick_Handler()) должен быть вызов функции HAL_IncTick(). Эта функция увеличивает счетчик времени на единицу.

Приоритет прерывания SysTick задается определением TICK_INT_PRIORITY в файле stm32*_hal_conf.h. Чтобы функция HAL_Delay() работала в обработчиках других прерываний, требуется чтобы приоритет этих прерываний был меньше, чем у SysTick.

В другой своей статье я исследовал последствия переполнения переменной uwTick.

Реклама

Автор

Дмитрий Бравиков

Инженер. Электронщик. Программист.

Отсчет времени в STM32Cube: 5 комментариев

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s