Skocz do zawartości

STM32F3 Discovery. PWM.


MasteR_PuppetS

Pomocna odpowiedź

Hail!

Zachodzę w głowę, dlaczego PWM działa tylko na PD13, a na PD12,14,15 juz nie ?

Zechciałby ktoś wyjaśnić?

Byłbym wdzięczny.

#include "stm32f30x.h"
#include "stm32f3_discovery.h"
#include "stm32f30x_tim.h"

GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_InitStructure;
TIM_OCInitTypeDef TIM_OCStruct;


int main(void)
{

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);    //Clock for GPIOD


/*Alternating functions for pins*/
GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_2);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_2);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_2);
GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_2);


/* Set pins */
       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD, &GPIO_InitStructure);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);    // Enable clock for TIM4

TIM_InitStructure.TIM_Prescaler = 0;
   TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_InitStructure.TIM_Period = 8399;
   TIM_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
   TIM_InitStructure.TIM_RepetitionCounter = 0;
   TIM_TimeBaseInit(TIM4, &TIM_InitStructure);
   TIM_Cmd(TIM4, ENABLE);


   TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM2;
   TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
   TIM_OCStruct.TIM_Pulse = 4199; /* 50% duty cycle */
   TIM_OC2Init(TIM4, &TIM_OCStruct);
   TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);



   GPIO_SetBits(GPIOD, GPIO_Pin_12);



   GPIO_SetBits(GPIOD, GPIO_Pin_13);



   GPIO_SetBits(GPIOD, GPIO_Pin_14);



   GPIO_SetBits(GPIOD, GPIO_Pin_15);




   while(1)
   {
   }
}
Link do komentarza
Share on other sites

Uruchamiasz tylko 2 kanał PWM-a:

TIM_OC2Init(TIM4, &TIM_OCStruct); 
   TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); 

Więc na PD13 jest synał.

Dodaj jeszcze wywołania dla pozostałych kanałów i powinno być ok.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.