Forum: Mikrocontroller und Digitale Elektronik STM32 PWM allgemein


von Dennis X. (Gast)


Lesenswert?

Hallo STM32-Benutzer,
ich versuche gerade einen Motortreier über ein PWM-Signal u steuern. Das 
ganze sollte auf meinem STM32F103 Board noch Platz finden und so hab ich 
mir mal ein wenig die Codes dazu anesen und daraus dann meine 
Initialisierung gebastlt.

Hier meine Initialisierung:
1
  /* GPIOB Configuration: TIM4 CH3 + 4 */
2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 ;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
4
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5
  GPIO_Init(GPIOB, &GPIO_InitStructure);
6
7
  /* Time base configuration */
8
  TIM_TimeBaseStructure.TIM_Period = 100;
9
  TIM_TimeBaseStructure.TIM_Prescaler = 200;
10
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
11
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
12
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
13
14
  TIM_ARRPreloadConfig (TIM4, ENABLE);
15
16
  // Update registers
17
  TIM4->EGR |= (1 << TIM_EGR_UG);
18
19
  /* PWM1 Mode configuration: Channel3 */
20
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
21
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
22
  TIM_OCInitStructure.TIM_Pulse = 10;
23
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
24
  TIM_OC3Init(TIM4, &TIM_OCInitStructure);
25
26
  TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
27
28
  /* PWM1 Mode configuration: Channel4 */
29
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
30
  TIM_OCInitStructure.TIM_Pulse = 20;
31
  TIM_OC4Init(TIM4, &TIM_OCInitStructure);
32
33
  TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
34
35
  /* TIM4 enable counter */
36
  TIM_Cmd(TIM4, ENABLE);
37
  TIM_CtrlPWMOutputs(TIM4, ENABLE);

Hat das von euch schonmal jemand gemacht? Am Ausgang messe ich nichts.
Wäre über eine kleine Hilfe echt dankbar!

P.S.: Muss ich meine Pins über einen ReMap neu programmieren? Bei 
früheren Controllern der STM32 Serie war das ja so oder? Hab in der Lib 
aber keinerlei Funktionen dazu gefunden, da das ja jetzt über GPIO_Mode 
kalppt.

von holger (Gast)


Lesenswert?

>Hat das von euch schonmal jemand gemacht? Am Ausgang messe ich nichts.
>Wäre über eine kleine Hilfe echt dankbar!

Stichwort APB und RCC Clock. Davon seh ich bei dir nichts.

von Dennis X. (Gast)


Lesenswert?

In der Datei system_stm3210x.c sind die Clocks eingestellt. Diese Datei 
erzeugt das TrueStudio selber. Darin auch die Einstellungen für den 
Systemtakt von 72MHz.

von holger (Gast)


Lesenswert?

>In der Datei system_stm3210x.c sind die Clocks eingestellt.

Zeigen.

von Dennis X. (Gast)


Angehängte Dateien:

Lesenswert?

Hier...

von holger (Gast)


Lesenswert?

>Hier...

Da steht nichts drin um deine Peripherie mit einem
Takt zu versorgen. Sowas zum Bleistift:

  /* TIM1 clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

von Dennis X. (Gast)


Lesenswert?

1
  /* TIM3 clock enable */
2
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
3
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);


Das steht kurz vor dem Code, welchen ich gepostet hab. Also alles i.O. 
aber geht trotzdem nicht.

von Dennis X. (Gast)


Lesenswert?

Hängt mein Problem mit den Interuppts zusammen?
Eigentlich brauche ich doch aber keine Interuppts, denn das macht der 
Controller von alleine.
Habe leider den Fehler noch nicht gefunden.

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.