ШИМ на STM32

У микроконтроллеров STM32 существует несколько различных таймеров, многие из них могут работать в режиме ШИМ - широтно импульсной модуляции.

Для того чтобы получить ШИМ на STM32 необходимо сделать следующие действия:

// Включаем порт ввода-вывода и настраиваем ножку PB0
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// Включаем тактирование таймера
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// Настраиваем таймер на использование 3 канала (т.е. контакта PB0)
TIM3->CCER |= TIM_CCER_CC3E;
// Переводим 3 канал в режим ШИМ2
TIM3->CCMR2|= TIM_CCMR2_OC3M_0 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2;
// Настраиваем прескалер
TIM3->PSC = 10;
// Настраиваем период таймера = 1000 циклов
TIM3->ARR = 1000;
// Настраиваем скважность = 200 циклов
TIM3->CCR3 = 200;
// Включаем таймер
TIM3->CR1 |= TIM_CR1_CEN;

В данном примере настройка ШИМ-а осуществляется при помощи прямой записи определенного значения в регистры микроконтроллера, аналогичную настройку можно осуществить используя стандартные библиотеки StdPeriph.

Таймер затактирован от шины RCC_APB1Pheriph с частотой в 12 МГц, полученные тактовые импульсы поступают на предделитель, который мы настроили на 10. В итоге на выходе мы получаем импусы с частотойв 1.2 МГц.

Пирод нашего ШИМ сигнала настроен на 1000 тактов или отсчетов, после достижения данного значения процесс повторяется заново. Скважность ШИМ сигнала STM32 на выходе порта настроен на 200.

После компиляции программы и заливки на микроконтроллер STM32 на 0-м выходе порта B должен получится ШИМ сигнал. 

Добавить комментарий


Защитный код
Обновить

Последние комментарии

Последнии темы форума

  • Нет сообщений для показа