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_StatusTypeDef HAL_TIM_Base_DeInit (TIM_HandleTypeDef * htim)
Деинициализация таймера, отключение.
- htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.
Возвращает тип HAL_Status:
- HAL_OK – при успешном выполнении;
- HAL_ERROR – при ошибке.
HAL_TIM_Base_DeInit(&htim1); // отключение таймера
HAL_StatusTypeDef HAL_TIM_Base_Start (TIM_HandleTypeDef * htim)
Разрешает работу таймера, запускает его.
- htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.
Возвращает тип HAL_Status:
- HAL_OK – при успешном выполнении;
- HAL_ERROR – при ошибке.
HAL_TIM_Base_Start(&htim1); // запуск таймера
HAL_StatusTypeDef HAL_TIM_Base_Stop (TIM_HandleTypeDef * htim)
Останавливает таймер.
- htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.
Возвращает тип HAL_Status:
- HAL_OK – при успешном выполнении;
- HAL_ERROR – при ошибке.
HAL_TIM_Base_Stop(&htim1); // остановка таймера
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_StatusTypeDef HAL_TIM_Base_Stop_IT (TIM_HandleTypeDef * htim)
Останавливает таймер, запрещает его прерывания.
- htim – указатель на структуру параметров конфигурации типа TIM_HandleTypeDef.
Возвращает тип HAL_Status:
- HAL_OK – при успешном выполнении;
- HAL_ERROR – при ошибке.
HAL_TIM_Base_Stop_IT(&htim1); // остановка таймера
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_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) {
// ошибка инициализации
}