В своем проекте на stm32f4 использую таймер TIM5. Все крутится на FreeRTOS, начальный код сгенерирован CubeMX. Задача следущая: Задача №1 при определенном событии запускает таймер на какое то время и засыпает... Задача №2 тоже должна запускать этот же таймер при ином событии, но если таймер уже запущен задачей №1 то его перезапускать не нужно. Иными словами задача 2 должна проверить состояние таймера перед запуском. Как организовать такую проверку на HAL ? Есть ли функция позволяющая это делать? Вариант глобальной переменной в которую пишутся значения таймера при старте\останове я не рассматриваю, должен быть более изящный вариант.
Надеюсь кто то мне поможет, спасибо.
Как узнать запущен ли таймер в данный момент.
-
Neo_Matrix
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср июл 15, 2009 16:48:24
Re: Как узнать запущен ли таймер в данный момент.
Бит CEN регистра TIMx_CR1 опредеяет состояние таймера.
-
Neo_Matrix
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср июл 15, 2009 16:48:24
Re: Как узнать запущен ли таймер в данный момент.
Так и предполагал, он в дефайнах ХАЛ библиотек значится. Думал у хала есть отдельная функция или макрос для этого.
Спасибо Ser60.
Вот:
И макрос запуска таймера: #define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
А для чтения состояния они не предусмотрели нечего....
Спасибо 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: Как узнать запущен ли таймер в данный момент.
Так, что то я понять не могу, бит состояния читать по принципу:
Или я не правильно понял?
Код: Выделить всё
if (TIM5 ->CR1 & TIM_CR1_CEN)
{
//Тут выполняем код
}Или я не правильно понял?
Re: Как узнать запущен ли таймер в данный момент.
Правильно поняли. Именно так.
-
Neo_Matrix
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср июл 15, 2009 16:48:24
Re: Как узнать запущен ли таймер в данный момент.
Ser60
Спасибо
Конечный вариант
Спасибо
Конечный вариант
Код: Выделить всё
#define __HAL_TIM_GET_CR1_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->CR1 &(__FLAG__)) == (__FLAG__))