Запуск Timer16 в однократном или непрерывном режиме: различия между версиями

Материал из MIK32 микроконтроллер
Нет описания правки
Строка 7: Строка 7:
Затем перейдем к настройке самого таймера. Для этого откроем вкладку Timer16_1 и включим таймер, выбрав один из режимов. Выберем, например, непрерывный режим.
Затем перейдем к настройке самого таймера. Для этого откроем вкладку Timer16_1 и включим таймер, выбрав один из режимов. Выберем, например, непрерывный режим.


После этого нужно выбрать источник тактирования, который будет использоваться для подсчета. Выберем, например,
После этого нужно выбрать источник тактирования, который будет использоваться для подсчета. Выберем, например, тактирование от системной частоты. Для тактирования от внутреннего источника оставим источник синхронизации по умолчанию.
 
Далее следует выбрать нужный вам делитель частоты.
 
Активный фронт задает фронт, по которому будет происходить увеличение счетчика. Эта настройка используется при внешнем источнике синхронизации. В нашем примере тактирование от внутреннего источника, поэтому эта настройка нам не нужна.


(Объяснение работы с конфигуратором. В разработке)
(Объяснение работы с конфигуратором. В разработке)

Версия от 08:51, 10 февраля 2023

В примере будет запускаться Timer16_1 в однократном или непрерывном режиме с использованием конфигуратора.

Для начала настроем в конфигураторе тактирование mik32, например, от внешнего кварца 32МГц. Затем настроем делители шины. Так как Timer16 тактируется от шины APB_P_CLK, то зададим делители AHB_DIV и APB_P_DIV. В данном примере оставим делители по умолчанию. В итоге вкладка с тактированием должна выглядеть так:

(Картинка тактирования из конфигуратора. В работе)

Затем перейдем к настройке самого таймера. Для этого откроем вкладку Timer16_1 и включим таймер, выбрав один из режимов. Выберем, например, непрерывный режим.

После этого нужно выбрать источник тактирования, который будет использоваться для подсчета. Выберем, например, тактирование от системной частоты. Для тактирования от внутреннего источника оставим источник синхронизации по умолчанию.

Далее следует выбрать нужный вам делитель частоты.

Активный фронт задает фронт, по которому будет происходить увеличение счетчика. Эта настройка используется при внешнем источнике синхронизации. В нашем примере тактирование от внутреннего источника, поэтому эта настройка нам не нужна.

(Объяснение работы с конфигуратором. В разработке)

После генерации кода в конфигураторе в файле main.c должна быть функция Timer16_1_Init, в которой будут заданы настройки для Timer16_1. Выглядит она так:

static void Timer16_1_Init(void)
{
    htimer16_1.Instance = TIMER16_1;

    /* Настройка тактирования */
    htimer16_1.Clock.Source = TIMER16_SOURCE_INTERNAL_SYSTEM;
    htimer16_1.CountMode = TIMER16_COUNTMODE_INTERNAL;  /* При тактировании от Input1 не имеет значения */
    htimer16_1.Clock.Prescaler = TIMER16_PRESCALER_1;
    htimer16_1.ActiveEdge = TIMER16_ACTIVEEDGE_RISING;  /* Выбирается при тактированиии от Input1 */

    /* Настройка верхнего предела счета */
    htimer16_1.Period = 0xFFFF;
    /* Настрйока режима обновления регистра ARR и CMP */
    htimer16_1.Preload = TIMER16_PRELOAD_AFTERWRITE;

    /* Настройка тригера */
    htimer16_1.Trigger.Source = TIMER16_TRIGGER_TIM1_GPIO1_9; 
    htimer16_1.Trigger.ActiveEdge = TIMER16_TRIGGER_ACTIVEEDGE_SOFTWARE;    /* При использовании триггера значение доложно быть отлично от software */
    htimer16_1.Trigger.TimeOut = TIMER16_TIMEOUT_DISABLE;   /* Разрешить повторное срабатывание триггера */

    /* Настройки фильтра */
    htimer16_1.Filter.ExternalClock = TIMER16_FILTER_NONE;
    htimer16_1.Filter.Trigger = TIMER16_FILTER_NONE;

    /* Настройка режима энкодера */
    htimer16_1.EncoderMode = TIMER16_ENCODER_DISABLE;

    HAL_Timer16_Init(&htimer16_1);
}