реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> TIM2 in PWM mode
Jenya7
сообщение Nov 1 2013, 08:38
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



У меня STM32F103RBT6. Хочу поднять 4 канала PWM на TIM2. но, как я понял, первый канал нельзя настроить на выход PWM или я ошибаюсь?
Вот мой код
CODE
void PwmInit(void)
{
//ch1 -PA0
GPIOA->CRL |= GPIO_CRL_MODE0; //50Mhz
GPIOA->CRL &= ~GPIO_CRL_CNF0; //clear CNF[1:0] for PA0
GPIOA->CRL |= GPIO_CRL_CNF1_0; //output Push-Pull in alternative function mode
//ch2 - PA1
GPIOA->CRL |= GPIO_CRL_MODE1; //50Mhz
GPIOA->CRL &= ~GPIO_CRL_CNF1; //clear CNF[1:0] for PA1
GPIOA->CRL |= GPIO_CRL_CNF1_1; //output Push-Pull in alternative function mode
//ch3 - PA2
GPIOA->CRL |= GPIO_CRL_MODE2; //50Mhz
GPIOA->CRL &= ~GPIO_CRL_CNF2; //clear CNF[1:0] for PA2
GPIOA->CRL |= GPIO_CRL_CNF2_1; //output Push-Pull in alternative function mode
//ch4 - PA3
GPIOA->CRL |= GPIO_CRL_MODE3; //50Mhz
GPIOA->CRL &= ~GPIO_CRL_CNF3; //clear CNF[1:0] for PA3
GPIOA->CRL |= GPIO_CRL_CNF3_1; //output Push-Pull in alternative function mode
//TIM2 Settings
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->CR1 |= TIM_CR1_ARPE; //autorelode mode
TIM2->CCMR1 |= TIM_CCMR1_OC1PE | TIM_CCMR1_OC2PE; //Output Compare Preload enable
TIM2->CCMR2 |= TIM_CCMR2_OC3PE | TIM_CCMR2_OC4PE;
TIM2->ARR = 20000;
TIM2->CCR1 = 10000; //ch1 1duty cycle = 50%
TIM2->CCR2 = 10000; //ch2 1duty cycle = 50%
TIM2->CCR3 = 10000; //ch2 1duty cycle = 50%
TIM2->CCR4 = 10000; //ch2 1duty cycle = 50%
//TIM2->CCER |= TIM_CCER_CC2P; //polarity of output signal
//Capture/Compare output enable
TIM2->CCER |= TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E;
//Output Compare Mode - 110 - PWM mode 1
TIM2->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1);
TIM2->CCMR1 |= (TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1);
TIM2->CCMR2 |= (TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1);
TIM2->CCMR2 |= (TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1);
TIM2->CR1 |= TIM_CR1_CEN; //start counting
}

На PA1,PA2,PA3 я вижу сигнал, на PA0 - нет.

Сообщение отредактировал Jenya7 - Nov 1 2013, 08:39
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Nov 2 2013, 08:22
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Может здесь собака порылась???
Код
GPIOA->CRL |= GPIO_CRL_CNF1_0; //output Push-Pull in alternative function mode

Должно быть GPIO_CRL_CNF0_1...
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Nov 2 2013, 18:06
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(HHIMERA @ Nov 2 2013, 14:22) *
Может здесь собака порылась???
Код
GPIOA->CRL |= GPIO_CRL_CNF1_0; //output Push-Pull in alternative function mode

Должно быть GPIO_CRL_CNF0_1...

Большое спасибо! Исправил, теперь все четыре канала работают.

Сообщение отредактировал Jenya7 - Nov 2 2013, 19:35
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 12:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016