HAL TIM Generic Driver. Функции управления таймерами.

 


 

HAL_TIM_Base_Init

HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim)

Устанавливает конфигурацию таймера согласно параметрам, заданным в структуре типа TIM_HandleTypeDef.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

Структура параметров конфигурации.

typedef struct {
  TIM_TypeDef  *Instance;  // базовый адрес регистров
  TIM_Base_InitTypeDef  Init;  // основные параметры таймера
  HAL_TIM_ActiveChannel  Channel;  // активные каналы
  DMA_HandleTypeDef  *hdma[7U];  // параметры DMA
  HAL_LockTypeDef  Lock;  // блокировка объекта
  __IO HAL_TIM_StateTypeDef  State;  // состояние таймера
} TIM_HandleTypeDef;

  • Instance – базовый адрес регистров таймера (TIM1 … TIM4).
  • Init – структура основных параметров таймера. Описана ниже.
  • Channel – структура активных каналов таймера.
  • hdma -  структура параметров DMA.
  • Lock – блокировка объекта. Сообщает системе о том, что таймер используется. Применяется для предотвращения случайного доступа к занятому ресурсу.
  • State – состояние таймера.
    • HAL_TIM_STATE_BUSY – занят, происходит инициализация;
    • HAL_TIM_STATE_READY – готов;
    • HAL_TIM_STATE_RESET – сброшен, не установлен.

Структура основных параметров таймера.

typedef struct {
  uint32_t Prescaler;  // предделитель
  uint32_t CounterMode;  // режим счета
  uint32_t Period;  // значение перезагрузки
  uint32_t ClockDivision;  // делитель
  uint32_t RepetitionCounter;  // значение повторов
  uint32_t AutoReloadPreload;  //  режим перезагрузки
} TIM_Base_InitTypeDef;

  • Prescaler – предделитель. Делит частоту входных импульсов таймера. Может иметь значение 0 … 65535, что соответствует коэффициенту деления 1 … 65536.
  • CounterMode – режим счетчика. Может принимать значения:
    • TIM_COUNTERMODE_UP – прямой счет.
    • TIM_COUNTERMODE_DOWN – реверсивный счет.
    • TIM_COUNTERMODE_CENTERALIGNED1 - двунаправленный счет, прерывание генерируется в момент, когда счетчик считает в обратную сторону и доходит до 0.
    • TIM_COUNTERMODE_CENTERALIGNED2 - двунаправленный счет, прерывание генерируется, когда счетчик считает в прямом направлении и достигает значения перезагрузки.
    • TIM_COUNTERMODE_CENTERALIGNED3 - двунаправленный счет, прерывание генерируется, в обоих случаях - при достижении 0 и значения перезагрузки.
  • Period – значение регистра перезагрузки. Определяет период работы таймера. Может принимать значения 0 … 65535, что соответствует периоду 1 … 65535 импульсов тактирования.
  • ClockDivision – делитель входной частоты для внутренних нужд таймера.
    • TIM_CLOCKDIVISION_DIV1;
    • TIM_CLOCKDIVISION_DIV2 ;
    • TIM_CLOCKDIVISION_DIV4 .
  • RepetitionCounter – значение регистра счетчика повторов. Делит частоту событий таймера. Может принимать значение 0 … 255, что соответствует делителю 1 … 256. Есть только у таймеров TIM1 и TIM8.
  • AutoReloadPreload – управляет режимом доступа регистра перезагрузки.
    • TIM_AUTORELOAD_PRELOAD_DISABLE – регистр перезагрузки не буферизирован;
    • TIM_AUTORELOAD_PRELOAD_ENABLE  - регистр перезагрузки буферизирован.

Пример инициализации таймера 1.

TIM_HandleTypeDef htim1;

/* конфигурация TIM1 */
htim1.Instance = TIM1;
htim1.Init.Prescaler = 719;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 100;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK) {

// ошибка инициализации
}

 

HAL_TIM_Base_DeInit

HAL_StatusTypeDef HAL_TIM_Base_DeInit (TIM_HandleTypeDef * htim)

Деинициализация таймера, отключение.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

HAL_TIM_Base_DeInit(&htim1); // отключение таймера

 

HAL_TIM_Base_Start

HAL_StatusTypeDef HAL_TIM_Base_Start (TIM_HandleTypeDef * htim)

Разрешает работу таймера, запускает его.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

HAL_TIM_Base_Start(&htim1); // запуск таймера

 

HAL_TIM_Base_Stop

HAL_StatusTypeDef HAL_TIM_Base_Stop (TIM_HandleTypeDef * htim)

Останавливает таймер.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

HAL_TIM_Base_Stop(&htim1); // остановка таймера

 

HAL_TIM_Base_Start_IT

HAL_StatusTypeDef HAL_TIM_Base_Start_IT (TIM_HandleTypeDef * htim)

Запускает таймер в режиме генерации прерываний. Запускает таймер и разрешает прерывания.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

HAL_TIM_Base_Start_IT(&htim1); // запуск таймера

 

HAL_TIM_Base_Stop_IT

HAL_StatusTypeDef HAL_TIM_Base_Stop_IT (TIM_HandleTypeDef * htim)

Останавливает таймер, запрещает его прерывания.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

HAL_TIM_Base_Stop_IT(&htim1); // остановка таймера

 

HAL_TIM_IRQHandler

void HAL_TIM_IRQHandler (TIM_HandleTypeDef * htim)

Завершает обработку прерывания по таймеру, сбрасывает флаг прерывания.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

void TIM1_UP_IRQHandler(void) {

  // обработка прерывания по таймеру

  HAL_TIM_IRQHandler(&htim1); // завершение
}

 

HAL_TIM_ConfigClockSource

HAL_StatusTypeDef HAL_TIM_ConfigClockSource (TIM_HandleTypeDef * htim, TIM_ClockConfigTypeDef * sClockSourceConfig)

Конфигурирует источник тактирования таймера.

  • htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.
  • sClockSourceConfig – указатель на структуру параметров конфигурации тактирования типа TIM_ClockConfigTypeDef.

Возвращает тип HAL_Status:

  • HAL_OK – при успешном выполнении;
  • HAL_ERROR – при ошибке.

Структура конфигурации тактирования.

typedef struct {
  uint32_t ClockSource;  // источник тактирования
  uint32_t ClockPolarity;  // полярность
  uint32_t ClockPrescaler;  // предделитель
  uint32_t ClockFilter;  // фильтр
} TIM_ClockConfigTypeDef;

  • ClockSource – источник тактирования таймера.
    • TIM_CLOCKSOURCE_ETRMODE2 – внешнее тактирование режим 2;
    • TIM_CLOCKSOURCE_INTERNAL – внутреннее тактирование (шина APB);
    • TIM_CLOCKSOURCE_ITR0 – внутренний триггер;
    • TIM_CLOCKSOURCE_ITR1 – внутренний триггер;
    • TIM_CLOCKSOURCE_ITR2 – внутренний триггер;
    • TIM_CLOCKSOURCE_ITR3 – внутренний триггер;
    • TIM_CLOCKSOURCE_TI1ED – вход TI1ED;
    • TIM_CLOCKSOURCE_TI1 – вход TI1;
    • TIM_CLOCKSOURCE_TI2 – вход TI2;
    • TIM_CLOCKSOURCE_ETRMODE1 – внешнее тактирование режим1.
  • ClockPolarity  - полярность сигнала тактирования.
    • TIM_CLOCKPOLARITY_INVERTED – инверсия для внешнего тактирования (ETRx);
    • TIM_CLOCKPOLARITY_NONINVERTED– без инверсии для внешнего тактирования (ETRx);
    • TIM _CLOCKPOLARITY_RISING – положительный фронт для входов TIx;
    • TIM_CLOCKPOLARITY_FALLING – отрицательный фронт для входов TIx;
    • TIM_CLOCKPOLARITY_BOTHEDGE – оба фронта для входов TIx.
  • ClockPrescaler – параметры предделителя для внешнего тактирования (ETR).
    • TIM_CLOCKPRESCALER_DIV1;
    • TIM_CLOCKPRESCALER_DIV2;
    • TIM_CLOCKPRESCALER_DIV4;
    • TIM_CLOCKPRESCALER_DIV8.
  • ClockFilter – параметр входного фильтра. Значение может быть в пределах 0 … 15.

Пример.

TIM_ClockConfigTypeDef sClockSourceConfig = {0};

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) {

// ошибка инициализации
}