Отсчет времени в 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.

-->
X
Обратный звонок