Страница 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__))