Forum: Mikrocontroller und Digitale Elektronik STM32F103VE kein PWM möglich


von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Hallo!

Ich benutze den STM32F103VE und die st-lib.

Um einen PWM zu erzeugen habe ich mir die folgende Funktion geschrieben:
1
void initPWM(void)
2
{
3
  GPIO_InitTypeDef GPIO_InitStructure;
4
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
5
  TIM_OCInitTypeDef TIM_OCInitStructure;
6
 
7
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
8
9
  /*Alternative function clock setup  for GPIO */
10
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
11
  /*Clock setup for timer8 */
12
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
13
  /*PC6,7,8,9 setup for timer8*/
14
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
15
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9;
16
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
17
  GPIO_Init(GPIOC, &GPIO_InitStructure);
18
  /*Timer Base Initialization for timer8 */
19
  TIM_TimeBaseInitStructure.TIM_Prescaler=2;
20
  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up ;
21
  TIM_TimeBaseInitStructure.TIM_Period = 4800-1;
22
  TIM_TimeBaseInitStructure.TIM_ClockDivision     = 0;
23
  TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStructure);
24
  /*Auto-reload always */
25
  TIM_ARRPreloadConfig(TIM8, DISABLE);
26
  /*Channels initialization for timer8 */
27
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
28
  TIM_OCInitStructure.TIM_OutputState      = TIM_OutputState_Enable ;
29
  TIM_OCInitStructure.TIM_Pulse = 3600-1;
30
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
31
  TIM_OC1Init(TIM8, &TIM_OCInitStructure);
32
  TIM_OC2Init(TIM8, &TIM_OCInitStructure);
33
  TIM_OC3Init(TIM8, &TIM_OCInitStructure);
34
  TIM_OC4Init(TIM8, &TIM_OCInitStructure);
35
  /*CCRs auto-reload always */
36
  TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Disable);
37
  TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Disable);
38
  TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Disable);
39
  TIM_OC4PreloadConfig(TIM8,TIM_OCPreload_Disable);
40
  /*Start counter for timer8 */
41
  TIM_Cmd(TIM8, ENABLE);
42
}

Leider bekomme ich an den entsprechenden Pins (LQFP100 Package: PC6-> 
Pin63, PC7-> Pin64, PC8-> Pin65, PC9-> Pin66) absolut keinen PWM... was 
mache ich falsch?

Gruß,

    hhanff

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

... oder hat jemand vielleicht einen PWM im Angebot den ich testen 
kann???

von moein badri (Gast)


Lesenswert?

TIM_CtrlPWMOutputs(TIM8, ENABLE);

DIESES IST, WAS SIE BRAUCHEN

THIS IS WHAT YOU NEED

von moein badri (Gast)


Lesenswert?

void TIM8_PWM_Init(u16 arr,u16 psc)
{


  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  //TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2  PORTC7 TIMER8
  //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  //PCout(7)=1;
  TIM_TimeBaseStructure.TIM_Period = arr;
  TIM_TimeBaseStructure.TIM_Prescaler =psc;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);


  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 100;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC2Init(TIM8, &TIM_OCInitStructure);
//-------------------------------------------------------------------


  TIM_CtrlPWMOutputs(TIM8, ENABLE);
  TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
  TIM_ARRPreloadConfig(TIM8, ENABLE);
  TIM_Cmd(TIM8, ENABLE);

}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.