Предпосылки:

Это руководство не предназначено для использования в качестве руководства по изучению языка C или платформы STM32. Его основная цель — предоставить разработчикам краткое руководство по интеграции периферийных модулей и функций в активные приложения.

Если вы новичок, я бы порекомендовал вам ознакомиться с руководством по настройке проекта STM32, подобным этому.

https://medium.com/vicara-hardware-university/smt32-project-setup-with-cubeide-947974baf713

Что такое таймер на микроконтроллере?

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

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

STM32 GPIO и библиотека HAL

STM32 HAL

Библиотека аппаратных абстракций (HAL) является частью библиотек разработчиков, предоставляемых STMicroelectronics для упрощения разработки. Библиотека абстракций — это набор функций и определений, которые позволяют разработчикам сосредоточиться на том, чтобы их код работал, вместо того, чтобы увязнуть в настройке всего множества регистров и битов, чтобы получить возможность простой операции ввода-вывода. Используя функции из библиотеки HAL, разработчики могут просто вызвать одну функцию для выполнения таких операций, как чтение данных ввода-вывода, или даже для выполнения сложных процессов, таких как SPI или I2C.

ТАЙМЕР STM32

Большинство микроконтроллеров STM32 имеют 16-битный счетчик автоматической перезагрузки и 16-битный предварительный делитель. Предварительный делитель используется для изменения входящего сигнала/тактовой частоты от внешнего генератора и преобразования его в частоту, необходимую пользователю.

Таким образом, пользователь может получить частоту обработки 64 МГц, даже если кварц на схеме 8 МГц. Следовательно, предварительный делитель также может понижать частоту исходного тактового сигнала.

Они также действуют как счетчики в микроконтроллерах и могут использоваться для отслеживания операций. 16-разрядный таймер может считать до 255. Как только это достигается, он переворачивается и снова начинает с 0.

Таймер на STM32F4

Поскольку у меня есть комплект разработчика 32F4 Discovery, я собираюсь обратиться к его техническому описанию, чтобы узнать больше о доступных параметрах таймера.

https://www.st.com/resource/en/datasheet/dm00037051.pdf

Согласно техническому описанию выше, модуль STM32F4 имеет 12 16-битных таймеров и 2 32-битных таймера, каждый из которых может работать на частоте до 168 МГц.

ФУНКЦИИ ТАЙМЕРА HAL

  1. Инициализируйте низкоуровневые ресурсы TIM, реализуя следующие функции в зависимости от используемой функции:
     Time Base: HAL_TIM_Base_MspInit()
     Input Capture: HAL_TIM_IC_MspInit()
     Сравнение вывода: HAL_TIM_OC_MspInit()
     Генерация ШИМ: HAL_TIM_PWM_MspInit()
     Выход в одноимпульсном режиме: HAL_TIM_OnePulse_MspInit()
     Выход в режиме энкодера: HAL_TIM_Encoder_MspInit()

2. Инициализируйте низкоуровневые ресурсы TIM:
a. Включите часы интерфейса TIM с помощью __TIMx_CLK_ENABLE();
б. Конфигурация выводов TIM: включите часы для GPIO TIM, используя следующую функцию: __GPIOx_CLK_ENABLE();
Настройте эти выводы TIM в режиме альтернативной функции, используя HAL_GPIO_Init();

3. При необходимости внешние часы можно настроить (часами по умолчанию являются внутренние часы от APBx) с помощью следующей функции:HAL_TIM_ConfigClockSource, настройка часов должна выполняться перед любой функцией запуска.

4. Настройте TIM в желаемом режиме работы, используя одну из функций инициализации этого драйвера:
 HAL_TIM_Base_Init: для использования таймера для создания простой временной базы
 HAL_TIM_OC_Init и HAL_TIM_OC_ConfigChannel: для использования Таймер
генерирует сигнал сравнения выходов.
 HAL_TIM_PWM_Init и HAL_TIM_PWM_ConfigChannel: использование таймера для генерации сигнала ШИМ.
 HAL_TIM_IC_Init и HAL_TIM_IC_ConfigChannel: использование таймера для измерения внешнего сигнала .
 HAL_TIM_OnePulse_Init и HAL_TIM_OnePulse_ConfigChannel: для использования таймера в одноимпульсном режиме.
 HAL_TIM_Encoder_Init: для использования интерфейса кодировщика таймера.

5. Активируйте периферийное устройство TIM, используя одну из функций запуска в зависимости от используемой функции:
 Time Base: HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(),
HAL_TIM_Base_Start_IT()
 Input Capture : HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(),
HAL_TIM_IC_Start_IT()
 Сравнение выходных данных: HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(),
HAL_TIM_OC_Start_IT()
Универсальный драйвер HAL TIM UM1725
874/1838 DocID025834 Rev 5
- Генерация ШИМ: HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(),
HAL_TIM_PWM_Start_IT()
- Выход в одноимпульсном режиме: HAL_TIM_OnePulse_Start(),
HAL_TIM_OnePulse_Start_IT()
 Выход режима кодировщика: HAL_TIM_Encoder_Start(),
HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().

6. Пакет DMA управляется двумя следующими функциями:
HAL_TIM_DMABurst_WriteStart() HAL_TIM_DMABurst_ReadStart()

Вывод

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

Источники: