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

 


 

LL_TIM_EnableCounter

__STATIC_INLINE void LL_TIM_EnableCounter (TIM_TypeDef * TIMx)

Разрешает работу счетчика. Устанавливает бит CEN.

  • TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_EnableCounter(TIM1);  // разрешить счетчик 1

 

LL_TIM_DisableCounter

__STATIC_INLINE void LL_TIM_DisableCounter (TIM_TypeDef * TIMx)

Запрещает работу счетчика. Сбрасывает бит CEN.

  • TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_DisableCounter(TIM1);  // запретить счетчик 1

 

LL_TIM_IsEnabledCounter

__STATIC_INLINE uint32_t LL_TIM_IsEnabledCounter (TIM_TypeDef * TIMx)

Проверяет, разрешена ли работа счетчика.

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает: 1 или 0 (счетчик разрешен или нет).

 

if( LL_TIM_IsEnabledCounter(TIM1) ) {

    // счетчик разрешен
}

 

LL_TIM_EnableUpdateEvent

__STATIC_INLINE void LL_TIM_EnableUpdateEvent (TIM_TypeDef * TIMx)

Разрешает перезагрузку счетчика. Сбрасывает бит UDIS.

  • TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_EnableUpdateEvent(TIM1);  // разрешить перезагрузку

 

LL_TIM_DisableUpdateEvent

__STATIC_INLINE void LL_TIM_DisableUpdateEvent (TIM_TypeDef * TIMx)

Запрещает перезагрузку счетчика. Устанавливает бит UDIS.

  • TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_DisableUpdateEvent(TIM1);  // запрет перезагрузки

 

LL_TIM_IsEnabledUpdateEvent

__STATIC_INLINE uint32_t LL_TIM_IsEnabledUpdateEvent (TIM_TypeDef * TIMx)

Проверяет, разрешена ли перезагрузка счетчика.

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает: 1 или 0 (перезагрузка разрешена или нет).

if( LL_TIM_IsEnabledUpdateEvent(TIM1) ) {

    // перезагрузка разрешена
}

 

LL_TIM_SetUpdateSource

__STATIC_INLINE void LL_TIM_SetUpdateSource (TIM_TypeDef * TIMx, uint32_t UpdateSource)

Задает логику формирования события перезагрузки (UEV).

  • TIMx – таймер (TIM1, TIM2,… ).
  • UpdateSource – режим формирования UEV:
    • LL_TIM_UPDATESOURCE_REGULAR – событие формируется по переполнению счетчика, программной инициацией (бит UG) и сигналом ведомого таймера.
    • LL_TIM_UPDATESOURCE_COUNTER  - событие формируется только по переполнению /обнулению счетчика.

Ничего не возвращает.

LL_TIM_SetUpdateSource(TIM1, LL_TIM_UPDATESOURCE_COUNTER );  // только счетчик

 

LL_TIM_GetUpdateSource

__STATIC_INLINE uint32_t LL_TIM_GetUpdateSource (TIM_TypeDef * TIMx)

Возвращает код логики формирования события перезагрузки (UEV).

TIMx – таймер (TIM1, TIM2,… ).

Возвращает:

LL_TIM_UPDATESOURCE_REGULAR – событие формируется по переполнению счетчика, программной инициацией (бит UG) и сигналом ведомого таймера.

LL_TIM_UPDATESOURCE_COUNTER  - событие формируется только по переполнению /обнулению счетчика.

if( LL_TIM_GetUpdateSource(TIM1) == LL_TIM_UPDATESOURCE_COUNTER ) {

    // UEV только по счетчику
}

 

LL_TIM_SetCounterMode

__STATIC_INLINE void LL_TIM_SetCounterMode (TIM_TypeDef * TIMx, uint32_t CounterMode)

Устанавливает режим счетчика.

  • TIMx – таймер (TIM1, TIM2,… ).
  • CounterMode – режим счета:
    • LL_TIM_COUNTERMODE_UP – прямой счет;
    • LL_TIM_COUNTERMODE_DOWN – реверсивный счет;
    • LL_TIM_COUNTERMODE_CENTER_UP – двунаправленный счет, флаг прерывания генерируется при счете в прямом направлении;
    • LL_TIM_COUNTERMODE_CENTER_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обратном направлении;
    • LL_TIM_COUNTERMODE_CENTER_UP_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обоих направлениях.

Ничего не возвращает.

LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);  // прямой счет

 

LL_TIM_GetCounterMode

__STATIC_INLINE uint32_t LL_TIM_GetCounterMode (TIM_TypeDef * TIMx)

Считывает режим счета.

TIMx – таймер (TIM1, TIM2,… ).

Возвращает:

  • LL_TIM_COUNTERMODE_UP – прямой счет;
  • LL_TIM_COUNTERMODE_DOWN – реверсивный счет;
  • LL_TIM_COUNTERMODE_CENTER_UP – двунаправленный счет, флаг прерывания генерируется при счете в прямом направлении;
  • LL_TIM_COUNTERMODE_CENTER_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обратном направлении;
  • LL_TIM_COUNTERMODE_CENTER_UP_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обоих направлениях.

if( LL_TIM_GetCounterMode(TIM1) == LL_TIM_COUNTERMODE_UP ) {

    // прямой счет
}

 

LL_TIM_EnableARRPreload

__STATIC_INLINE void LL_TIM_EnableARRPreload (TIM_TypeDef * TIMx)

Разрешает буферизацию регистра перезагрузки. Устанавливает бит ARPE.

TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_EnableARRPreload(TIM1);  // регистр перезагрузки буферизирован

 

LL_TIM_DisableARRPreload

__STATIC_INLINE void LL_TIM_DisableARRPreload (TIM_TypeDef * TIMx)

Запрещает буферизацию регистра перезагрузки. Сбрасывает бит ARPE.

TIMx – таймер (TIM1, TIM2,… ).

Ничего не возвращает.

LL_TIM_DisableARRPreload(TIM1);  // регистр перезагрузки небуферизирован

 

LL_TIM_IsEnabledARRPreload

__STATIC_INLINE uint32_t LL_TIM_IsEnabledARRPreload (TIM_TypeDef * TIMx)

Проверяет, разрешена ли буферизация регистра перезагрузки.

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает: 1 или 0 (буферизация разрешена или нет).

if( LL_TIM_IsEnabledARRPreload(TIM1) ) {

    // буферизация разрешена
}

 

LL_TIM_SetClockDivision

__STATIC_INLINE void LL_TIM_SetClockDivision (TIM_TypeDef * TIMx, uint32_t ClockDivision)

Задает коэффициент деления входной частоты для формирования тактовых импульсов цифровых фильтров и генератора ”мертвого” времени.

  • TIMx – таймер (TIM1, TIM2, … ).
  • ClockDivision – коэффициент деления частоты:
    • LL_TIM_CLOCKDIVISION_DIV1 – 1;
    • LL_TIM_CLOCKDIVISION_DIV2 – 2;
    • LL_TIM_CLOCKDIVISION_DIV4 – 4.

Ничего не возвращает.

LL_TIM_SetClockDivision(TIM1, LL_TIM_CLOCKDIVISION_DIV2);  // /2

 

LL_TIM_GetClockDivision

__STATIC_INLINE uint32_t LL_TIM_GetClockDivision (TIM_TypeDef * TIMx)

Считывает коэффициент деления входной частоты для формирования тактовых импульсов цифровых фильтров и генератора ”мертвого” времени.

  •  TIMx – таймер (TIM1, TIM2, … ).

Возвращает коэффициент деления:

  • LL_TIM_CLOCKDIVISION_DIV1 – 1;
  • LL_TIM_CLOCKDIVISION_DIV2 – 2;
  • LL_TIM_CLOCKDIVISION_DIV4 – 4.

if( LL_TIM_GetClockDivision(TIM1) == LL_TIM_CLOCKDIVISION_DIV2 ) {

    // частота / 2
}

 

LL_TIM_SetCounter

__STATIC_INLINE void LL_TIM_SetCounter (TIM_TypeDef * TIMx, uint32_t Counter)

Загружает значение в счетчик.

  • TIMx – таймер (TIM1, TIM2, … ).
  • Counter – загружаемое значение (0 ... 65535).

Ничего не возвращает.

LL_TIM_SetCounter(TIM1, 0);  // обнулить счетчик

 

LL_TIM_GetCounter

__STATIC_INLINE uint32_t LL_TIM_GetCounter (TIM_TypeDef * TIMx)

Считывает значение счетчика.

  • TIMx – таймер (TIM1, TIM2, … ).

Возвращает значение счетчика.

counter = LL_TIM_GetCounter(TIM1);  // считать счетчик

 

LL_TIM_GetDirection

__STATIC_INLINE uint32_t LL_TIM_GetDirection

Возвращает текущее направление счета.

  • TIMx – таймер (TIM1, TIM2, … ).

Возвращает направление счета:

  • LL_TIM_COUNTERDIRECTION_UP – прямой счет;
  • LL_TIM_COUNTERDIRECTION_DOWN – реверсивный счет.

if( LL_TIM_GetDirection(TIM1) == LL_TIM_COUNTERDIRECTION_UP ) {

    // прямой счет
}

 

LL_TIM_SetPrescaler

__STATIC_INLINE void LL_TIM_SetPrescaler (TIM_TypeDef * TIMx, uint32_t Prescaler)

Установка значения предделителя (PSC).

  • TIMx – таймер (TIM1, TIM2, … ).
  • Prescaler – значение предделителя (0 ... 65535).

Ничего не возвращает.

LL_TIM_SetPrescaler(TIM1, 720);  // предделитель = 720

 

LL_TIM_GetPrescaler

__STATIC_INLINE uint32_t LL_TIM_GetPrescaler (TIM_TypeDef * TIMx)

Возвращает значение регистра предделителя (PSC).

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает значение предделителя.

if( LL_TIM_GetPrescaler(TIM1) == 720 ) {

    // PSC = 720
}

 

LL_TIM_SetAutoReload

__STATIC_INLINE void LL_TIM_SetAutoReload (TIM_TypeDef * TIMx, uint32_t AutoReload)

Установка значения перезагрузки (регистра перезагрузки).

  • TIMx – таймер (TIM1, TIM2,… ).
  • AutoReload – значение перезагрузки (0 … 65535).

Ничего не возвращает.

LL_TIM_SetAutoReload(TIM1, 10000);  // перезагрузка при 10000

 

LL_TIM_GetAutoReload

__STATIC_INLINE uint32_t LL_TIM_GetAutoReload (TIM_TypeDef * TIMx)

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает значение регистра перезагрузки.

autoReload = LL_TIM_GetAutoReload(TIM1);  // чтение регистра перезагрузки

 

LL_TIM_SetRepetitionCounter

__STATIC_INLINE void LL_TIM_SetRepetitionCounter (TIM_TypeDef * TIMx, uint32_t RepetitionCounter)

Установка регистра счетчика повторов (RCR).

  • TIMx – таймер (TIM1, TIM2, … ).
  • RepetitionCounter – значение регистра счетчика повторов (0 … 255).

Ничего не возвращает.

LL_TIM_SetRepetitionCounter(TIM1, 2);  // 2 повтора

 

LL_TIM_GetRepetitionCounter

__STATIC_INLINE uint32_t LL_TIM_GetRepetitionCounter (TIM_TypeDef * TIMx)

Чтение регистра счетчика повторов (RCR).

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает число повторов.

if( LL_TIM_GetRepetitionCounter(TIM1) == 2 ) {

    // 2 повтора
}

 

LL_TIM_EnableExternalClock

__STATIC_INLINE void LL_TIM_EnableExternalClock (TIM_TypeDef * TIMx)

Разрешает внешнее тактирование в режиме 2.

  • TIMx – таймер (TIM1, TIM2, … ).

Не возвращает ничего.

LL_TIM_EnableExternalClock(TIM1);  // разрешить внешнее тактирование 2

 

LL_TIM_DisableExternalClock

__STATIC_INLINE void LL_TIM_DisableExternalClock (TIM_TypeDef * TIMx)

Запрещает внешнее тактирование в режиме 2.

  • TIMx – таймер (TIM1, TIM2,… ).

Не возвращает ничего.

LL_TIM_DisableExternalClock(TIM1);  // запретить внешнее тактирование 2

 

LL_TIM_IsEnabledExternalClock

__STATIC_INLINE uint32_t LL_TIM_IsEnabledExternalClock (TIM_TypeDef * TIMx)

Проверка, разрешено ли внешнее тактирование в режиме 2.

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает 1 или 0 (разрешено или запрещено).

if( LL_TIM_IsEnabledExternalClock(TIM1) == 1 ) {

    // внешнее тактирование разрешено
}

 

LL_TIM_SetClockSource

__STATIC_INLINE void LL_TIM_SetClockSource (TIM_TypeDef * TIMx, uint32_t ClockSource)

Задает источник тактирования счетчика.

  • TIMx – таймер (TIM1, TIM2, … ).
  • ClockSource – источник тактирования:
    • LL_TIM_CLOCKSOURCE_INTERNAL – внутреннее;
    • LL_TIM_CLOCKSOURCE_EXT_MODE1 – внешнее режим 1;
    • LL_TIM_CLOCKSOURCE_EXT_MODE2 – внешнее режим 2.

Не возвращает ничего.

LL_TIM_SetClockSource(TIM1, LL_TIM_CLOCKSOURCE_INTERNAL);  // внутреннее тактирование

 

LL_TIM_ClearFlag_UPDATE

__STATIC_INLINE void LL_TIM_ClearFlag_UPDATE (TIM_TypeDef * TIMx)

Сбрасывает флаг прерывания по переполнению (UIF).

  • TIMx – таймер (TIM1, TIM2,… ).

Не возвращает ничего.

LL_TIM_ClearFlag_UPDATE(TIM1);  // сброс флага прерывания

 

LL_TIM_IsActiveFlag_UPDATE

__STATIC_INLINE uint32_t LL_TIM_IsActiveFlag_UPDATE (TIM_TypeDef * TIMx)

Проверка состояния флага прерывания по переполнению (UIF).

  • TIMx – таймер (TIM1, TIM2, … ).

Возвращает 1 или 0 (флаг активен или нет).

if( LL_TIM_IsActiveFlag_UPDATE(TIM1) == 1 ) {

    // требование прерывания
}

 

LL_TIM_EnableIT_UPDATE

__STATIC_INLINE void LL_TIM_EnableIT_UPDATE (TIM_TypeDef * TIMx)

Разрешает прерывание по переполнению. Устанавливает бит (UIE).

  • TIMx – таймер (TIM1, TIM2,… ).

Не возвращает ничего.

LL_TIM_EnableIT_UPDATE(TIM1);  // разрешение прерывания

 

LL_TIM_DisableIT_UPDATE

__STATIC_INLINE void LL_TIM_DisableIT_UPDATE (TIM_TypeDef * TIMx)

Запрещает прерывание по переполнению. Устанавливает бит (UIE).

  • TIMx – таймер (TIM1, TIM2,… ).

Не возвращает ничего.

LL_TIM_DisableIT_UPDATE (TIM1);  // запрет прерывания

 

LL_TIM_IsEnabledIT_UPDATE

__STATIC_INLINE uint32_t LL_TIM_IsEnabledIT_UPDATE (TIM_TypeDef * TIMx)

Проверка, разрешено ли прерывание по переполнению (бит UIE).

  • TIMx – таймер (TIM1, TIM2, … ).

Возвращает 1 или 0 (разрешено или нет).

if( LL_TIM_IsEnabledIT_UPDATE(TIM1) == 1 ) {

    // прерывание разрешено
}

 

LL_TIM_GenerateEvent_UPDATE

__STATIC_INLINE void LL_TIM_GenerateEvent_UPDATE (TIM_TypeDef * TIMx)

Программная генерация события переполнения (бит UG).

  • TIMx – таймер (TIM1, TIM2, … ).

Не возвращает ничего.

LL_TIM_GenerateEvent_UPDATE(TIM1);  // формирование перезагрузки

 

LL_TIM_DeInit

ErrorStatus LL_TIM_DeInit (TIM_TypeDef * TIMx)

Установка регистров таймера в состояние после сброса.

  • TIMx – таймер (TIM1, TIM2,… ).

Возвращает:

  • SUCCESS – успешно;
  • ERROR – ошибка.

LL_TIM_DeInit(TIM1);  // сброс регистров таймера

 

LL_TIM_StructInit

void LL_TIM_StructInit (LL_TIM_InitTypeDef * TIM_InitStruct)

Установка полей структуры инициализации типа LL_TIM_InitTypeDef в состояние после сброса.

  • TIM_InitStruct – указатель на структуру инициализации типа LL_TIM_InitTypeDef.

Не возвращает ничего.

LL_TIM_InitTypeDef TIM_InitStruct;
LL_TIM_StructInit(&TIM_InitStruct);  // сброс

 

LL_TIM_Init

ErrorStatus LL_TIM_Init (TIM_TypeDef * TIMx, LL_TIM_InitTypeDef * TIM_InitStruct)

Устанавливает конфигурацию таймера.

  • TIMx – таймер (TIM1, TIM2, … ).
  • TIM_InitStruct – указатель на структуру инициализации типа LL_TIM_InitTypeDef.

Возвращает:

  • SUCCESS – успешно;
  • ERROR – ошибка.

Структура инициализации.

typedef struct {
  uint16_t Prescaler;  // предделитель (0 … 65535)
  uint32_t CounterMode;       // режим счета
  uint32_t Autoreload;        // значение перезагрузки (0 … 65535)
  uint32_t ClockDivision;     // делитель для цифровой фильтрации и формирования мертвого времени
  uint8_t RepetitionCounter;  // значение повторов (0 … 255)
}  LL_TIM_InitTypeDef;

Элемент CounterMode (режим счета) может принимать значения:

  • LL_TIM_COUNTERMODE_UP – прямой счет;
  • LL_TIM_COUNTERMODE_DOWN – реверсивный счет;
  • LL_TIM_COUNTERMODE_CENTER_UP – двунаправленный счет, флаг прерывания генерируется при счете в прямом направлении;
  • LL_TIM_COUNTERMODE_CENTER_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обратном направлении;
  • LL_TIM_COUNTERMODE_CENTER_UP_DOWN – двунаправленный счет, флаг прерывания генерируется при счете в обоих направлениях.

Элемент ClockDivision может принимать значения:

  • LL_TIM_CLOCKDIVISION_DIV1 – 1;
  • LL_TIM_CLOCKDIVISION_DIV2 – 2;
  • LL_TIM_CLOCKDIVISION_DIV4 – 4.

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

LL_TIM_InitTypeDef TIM_InitStruct = {0};
TIM_InitStruct.Prescaler = 719;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 25000;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
TIM_InitStruct.RepetitionCounter = 0;
LL_TIM_Init(TIM1, &TIM_InitStruct);  // установка конфигурации