STM32 и аналог ардуиновской millis()




В ардуиновском языке Wiring есть весьма удобная функция millis() (эта функция использует таймер №0), которая возвращает время с момента старта программы в миллисекундах. С помощью этой функции очень удобно организовывать выполнение в бесконечном цикле какой-либо операции с определёнными интервалами времени без задержки этого самого цикла. Конструкция эта хорошо всем известна…


unsigned long  timme = 0;
...
void loop() 
{  
	if((millis() - timme) > 1000) // интервал 1000мс = 1сек
	{ 
		// что-то делаем
		timme = millis();
	}
}

Что-то делается раз в секунду.


У stm32 есть системный таймер SysTick, который используется библиотекой HAL для создания паузы — HAL_Delay(). По умолчанию SysTick настроен на прерывание каждую миллисекунду и в своём обработчике приращивает 32-х битную переменную. То есть эта переменная хранит кол-во миллисекунд с момента старта МК. Чтобы узнать сколько миллисекунд натикало, нужно вызвать функцию HAL_GetTick(). То есть, HAL'овская функция HAL_GetTick() возвращает то же самое что и ардуиновская millis().

Исходя из этого, чтоб получить такой же механизм на stm32, нужно всего лишь заменить millis() на HAL_GetTick()


uint32_t  timme = 0;
...
while(1) 
{  
	if((HAL_GetTick() - timme) > 1000) // интервал 1000мс = 1сек
	{ 
		// что-то делаем
		timme = HAL_GetTick();
	}
}


Если вы не используете HAL, тогда можно настроить любой таймер так же как описана работа SysTick.



Это всё, всем спасибо


Телеграм-чат istarik

Телеграм-чат STM32


  • 0
  • 24437
Поддержать автора


Telegram-чат istarik

Задать вопрос по статье
Telegram-канал istarik

Известит Вас о новых публикациях






Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.