Как узнать запущен ли таймер в данный момент.

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Как узнать запущен ли таймер в данный момент.

Сообщение Neo_Matrix »

В своем проекте на stm32f4 использую таймер TIM5. Все крутится на FreeRTOS, начальный код сгенерирован CubeMX. Задача следущая: Задача №1 при определенном событии запускает таймер на какое то время и засыпает... Задача №2 тоже должна запускать этот же таймер при ином событии, но если таймер уже запущен задачей №1 то его перезапускать не нужно. Иными словами задача 2 должна проверить состояние таймера перед запуском. Как организовать такую проверку на HAL ? Есть ли функция позволяющая это делать? Вариант глобальной переменной в которую пишутся значения таймера при старте\останове я не рассматриваю, должен быть более изящный вариант.
Надеюсь кто то мне поможет, спасибо.
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Как узнать запущен ли таймер в данный момент.

Сообщение Ser60 »

Бит CEN регистра TIMx_CR1 опредеяет состояние таймера.
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Re: Как узнать запущен ли таймер в данный момент.

Сообщение Neo_Matrix »

Так и предполагал, он в дефайнах ХАЛ библиотек значится. Думал у хала есть отдельная функция или макрос для этого.
Спасибо Ser60.

Вот:

Код: Выделить всё

#define  TIM_CR1_CEN  ((uint32_t)0x0001U)  /*!<Counter enable   */

И макрос запуска таймера: #define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
А для чтения состояния они не предусмотрели нечего....
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Re: Как узнать запущен ли таймер в данный момент.

Сообщение Neo_Matrix »

Так, что то я понять не могу, бит состояния читать по принципу:

Код: Выделить всё

if (TIM5 ->CR1 & TIM_CR1_CEN)
{
//Тут выполняем код
}

Или я не правильно понял?
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3780
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: Как узнать запущен ли таймер в данный момент.

Сообщение Ser60 »

Правильно поняли. Именно так.
Neo_Matrix
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср июл 15, 2009 16:48:24

Re: Как узнать запущен ли таймер в данный момент.

Сообщение Neo_Matrix »

Ser60
Спасибо

Конечный вариант

Код: Выделить всё

#define __HAL_TIM_GET_CR1_FLAG(__HANDLE__, __FLAG__)          (((__HANDLE__)->Instance->CR1 &(__FLAG__)) == (__FLAG__))
Ответить

Вернуться в «ARM»