Страница 1 из 1
Как узнать запущен ли таймер в данный момент.
Добавлено: Пт апр 22, 2016 16:29:08
Neo_Matrix
В своем проекте на stm32f4 использую таймер TIM5. Все крутится на FreeRTOS, начальный код сгенерирован CubeMX. Задача следущая: Задача №1 при определенном событии запускает таймер на какое то время и засыпает... Задача №2 тоже должна запускать этот же таймер при ином событии, но если таймер уже запущен задачей №1 то его перезапускать не нужно. Иными словами задача 2 должна проверить состояние таймера перед запуском. Как организовать такую проверку на HAL ? Есть ли функция позволяющая это делать? Вариант глобальной переменной в которую пишутся значения таймера при старте\останове я не рассматриваю, должен быть более изящный вариант.
Надеюсь кто то мне поможет, спасибо.
Re: Как узнать запущен ли таймер в данный момент.
Добавлено: Пт апр 22, 2016 18:49:31
Ser60
Бит CEN регистра TIMx_CR1 опредеяет состояние таймера.
Re: Как узнать запущен ли таймер в данный момент.
Добавлено: Пт апр 22, 2016 22:16:31
Neo_Matrix
Так и предполагал, он в дефайнах ХАЛ библиотек значится. Думал у хала есть отдельная функция или макрос для этого.
Спасибо Ser60.
Вот:
Код: Выделить всё
#define TIM_CR1_CEN ((uint32_t)0x0001U) /*!<Counter enable */
И макрос запуска таймера: #define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
А для чтения состояния они не предусмотрели нечего....
Re: Как узнать запущен ли таймер в данный момент.
Добавлено: Пн апр 25, 2016 16:37:05
Neo_Matrix
Так, что то я понять не могу, бит состояния читать по принципу:
Код: Выделить всё
if (TIM5 ->CR1 & TIM_CR1_CEN)
{
//Тут выполняем код
}
Или я не правильно понял?
Re: Как узнать запущен ли таймер в данный момент.
Добавлено: Пн апр 25, 2016 17:17:53
Ser60
Правильно поняли. Именно так.
Re: Как узнать запущен ли таймер в данный момент.
Добавлено: Вт апр 26, 2016 16:09:28
Neo_Matrix
Ser60
Спасибо
Конечный вариант
Код: Выделить всё
#define __HAL_TIM_GET_CR1_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->CR1 &(__FLAG__)) == (__FLAG__))