Запуск Timer16 в однократном или непрерывном режиме: различия между версиями
Андрей (обсуждение | вклад) (Новая страница: «В примере будет запускаться Timer16_1 в однократном или непрерывном режиме с использованием...») |
Андрей (обсуждение | вклад) Нет описания правки |
||
Строка 11: | Строка 11: | ||
(Объяснение работы с конфигуратором. В разработке) | (Объяснение работы с конфигуратором. В разработке) | ||
После генерации кода в конфигураторе в файле main.c должна быть функция Timer16_1_Init, в которой будут заданы настройки для Timer16_1. Выглядит она так: | После генерации кода в конфигураторе в файле main.c должна быть функция Timer16_1_Init, в которой будут заданы настройки для Timer16_1. Выглядит она так:<syntaxhighlight lang="c" line="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); | |||
} | |||
</syntaxhighlight> |
Версия от 08:28, 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); }