STM32F4. Урок 25 — Работа с ШИМ

Данная библиотека была написана для работы с ШИМ микроконтроллера STM32.
STM32F4 имеет много (14) таймеров и почти все из них поддерживают функцию ШИМ. Для упрощения работы было выбрано 4 таймера общего назначения (TIM2 TIM3, TIM4 TIM5), выбраны они потому, что на канал приходится по 4 таймера.

Было написано 4 библиотеки для каждого таймера, содержание которых отличается только именами переменных и функций.
Таким образом использование четырех библиотек по четыре канала дает шестнадцать выводов ШИМ.
Имена используемых ШИМ должны быть указанны в H-файле и им должен быть присвоен вывод порта в C-файле (в примере используется только два канала ШИМ).
В H-файле указывается скважность и частота ШИМ. Эти настройки будут работать для всех четырех каналов таймера.

Пример использования:

Требования:

   Подключаемые модули CooCox-IDE: GPIO, TIM.
   Поддерживаемые библиотеки: отсутствуют.

Перечисления (для ШИМ на TIM2):

 typedef enum {   PWM_T2_PB11 = 0,  // ШИМ на TIM2 к PB11   PWM_T2_PA2  = 1   // ШИМ на TIM2 к PA2 }PWM_TIM2_NAME_t;

Функции (для ШИМ на TIM2):

 void UB_PWM_TIM2_Init(void);                                 // инициализация ШИМ на TIM2 void UB_PWM_TIM2_SetPWM(PWM_TIM2_NAME_t pwm, uint16_t wert); // установить значение ШИМ

Пример использования:

 //-------------------------------------------------------------- // File     : main.c // Datum    : 26.03.2013 // Version  : 1.0 // Autor    : UB // EMail    : mc-4u(@)t-online.de // Web      : www.mikrocontroller-4u.de // CPU      : STM32F4 // IDE      : CooCox CoIDE 1.7.0 // Module   : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der PWM-Library // Hinweis  : Diese zwei Files muessen auf 8MHz stehen //              "cmsis_boot/stm32f4xx.h" //              "cmsis_boot/system_stm32f4xx.c" //--------------------------------------------------------------  #include "main.h" #include "stm32_ub_pwm_tim4.h" #include "stm32_ub_adc1_single.h"  int main(void) {   uint16_t ad_wert;    SystemInit(); // Инициализация настроек кварца    // инициализация АЦП   UB_ADC1_SINGLE_Init();    // инициализация  ШИМ на Timer4   // настройки в H-файле:   //   разрешение = 8bit (0...255)   //   частота = 1kHz   //   канал 1 на PD12   //   канал 2 на PD14   UB_PWM_TIM4_Init();    // на PD12 установлена скважность 25%   UB_PWM_TIM4_SetPWM(PWM_T4_PD12,64);    // на PD14 установлена скважность 50%   UB_PWM_TIM4_SetPWM(PWM_T4_PD14,128);    while(1)   {     // читать значение АЦП на PA3 	ad_wert=UB_ADC1_SINGLE_Read_MW(ADC_PA3); 	// конвертировать 12 бит в 8 бит 	ad_wert=(ad_wert>>4); 	// установить значение ШИМ на PD12 	UB_PWM_TIM4_SetPWM(PWM_T4_PD12,ad_wert);   } } 

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