STM32F100 ШИМ на PA0

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

Пытаюсь сгенерировать ШИМ STM32F100 на вывод PA0
Подскажите, что делаю не так ?

Код: Выделить всё

  /*Инициализация GPIOA.
  Вывод PA0 настраивается для работы с выходом TIM2_CH2*/
  RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); // Тактирование порта GPIOA и альтернативных функций
  GPIOA->CRL |= GPIO_CRL_MODE0;  // Максимальная скорость порта = 50 MHz
  GPIOA->CRL &= ~GPIO_CRL_CNF0;  // Очистка бит CNF[1:0] для PA0 (поскольку после сброса мк задан режим "Input Floating")
  GPIOA->CRL |= GPIO_CRL_CNF0_1; // PA0 - выход Push-Pull в режиме альтернативной функции

  /*Инициализация таймера TIM2
  Для формирования сигнала ШИМ используется канал 2 (TIM2_CH2)*/
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;  // Тактирование таймера TIM2
  TIM2->CR1 |= TIM_CR1_ARPE; //  Включен режим предварительной записи регистра автоперезагрузки
  TIM2->CCMR1 |= TIM_CCMR1_OC1PE;  //  Включен режим предварительной загрузки регистра сравнения
  TIM2->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1);  // 110 - PWM mode 1
  TIM2->ARR = 380;//Период выходного сигнала
  TIM2->CCR2 = 100;//Длительность импульса
  TIM2->CCER |= TIM_CCER_CC1E;  // Выход канала захвата/сравнения включен
  TIM2->CR1 |= TIM_CR1_CEN;//Старт счета таймера
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Сообщение optima »

может в этом!

GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE); //PA0 подключаем к TIM2
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

TIM2->BDTR |= TIM_BDTR_MOE;
"Я не даю готовых решений, я заставляю думать!"(С)
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Сообщение Galizin »

Вот выдержка из даташита STM32F100xx pin definitions

Код: Выделить всё

PA0-WKUP I/O PA0 WKUP / USART2_CTS/ADC1_IN0 / TIM2_CH1_ETR 
PA1 I/O  PA1 USART2_RTS/ ADC1_IN1 /  TIM2_CH2
попробуйте связать pa1 с 2 каналом, или pa0 с 1 каналом
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

HHIMERA писал(а):TIM2->BDTR |= TIM_BDTR_MOE;
А этот регистр есть у таймера 2? Он же вроде есть только у TIM1, TIM8, TIM15, TIM16 и TIM17
И кстати действительно PA0 - это первый канал Tim2, но в коде он и включен TIM2->CCER |= TIM_CCER_CC1E;.
И ремапа никакого не надо, это альтернативная функция.
Можно попробовать без делителей с минимальными настройками:

Код: Выделить всё

TIM2->CCER |= TIM_CCER_CC1E; //Разрешаем таймеру использовать ноги PA0 для ШИМа
TIM2->CCMR1|=(TIM_CCMR1_OC1M_0| TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2); // задаем инверсный ШИМ.
TIM2->CR1 |= TIM_CR1_CEN; //Запускаем таймер!
//После этого пишем данные в TIM2->CCRx - и яркость светодиодов меняется
uint32_t pwm_arr[]={0,0,6553,13107,19660,26214,32768,
39321,45875,52428,58982,65535};
uint8_t i;
while(1){
for (i=1;i<=11;i++) {
TIM2->CCR1=pwm_arr[i];
delay();
}
for (i=11;i>=1;i--) {
TIM2->CCR1=pwm_arr[i];
delay();
}
как в этом примере http://easystm32.ru/for-beginners/35-pwm-in-stm32
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

amv2000 писал(а):
HHIMERA писал(а):TIM2->BDTR |= TIM_BDTR_MOE;
А этот регистр есть у таймера 2? Он же вроде есть только у TIM1, TIM8, TIM15, TIM16 и TIM17
Сорри... точно нету... издержки злокопипаста...
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 394
Зарегистрирован: Сб апр 28, 2012 16:04:14

Сообщение sx386 »

спасибо. Так заработало:

Код: Выделить всё

  // настроика порта PA0
  GPIOA->CRL |= GPIO_CRL_MODE0;   // максимальная скорость порта = 50 MHz
  GPIOA->CRL &= ~GPIO_CRL_CNF0;   // очистка бит CNF [1:0] для PA0. поскольку после сброса мк задан режим "Input Floating"
  GPIOA->CRL |= GPIO_CRL_CNF0_1;  // PA0 - выход Push-Pull в режиме альтернативной функции

  // инициализация таимера TIM2. используется канал 1
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;  // тактирование таимера TIM2
  TIM2->CCER |= TIM_CCER_CC1E;  // использование порта PA0 для ШИМ
  TIM2->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1);  // 110 - PWM mode 1
  TIM2->ARR = 1000;  // период выходного сигнала
  TIM2->CCR1 = 100;  // длительность
  TIM2->CR1 |= TIM_CR1_CEN;  // запуск таимера
Критикуешь - предлагай. Предлагаешь - делай. Делаешь - отвечай.
Ответить

Вернуться в «ARM»