Konfiguration eines Timers auf dem STM32F100RB6

OP Persönliche Seite #2278264
Lesenswert?

Hallo, ich habe derzeit ein Problem mit der Konfiguration des Timer3 auf 
dem STM32. Diesen möchte ich für eine PWM nutzen um eine LED einfach 
entsprechend in ihrer Helligkeit zu steuern - um mich entsprechend in 
den STM32 einzuarbeiten. Jedoch funktioniert das ganze nicht so wie ich 
es mir vorgestellt habe. Ich habe mich für die Konfiguration an den 
Beispielen der Library entlang gehangelt. Dabei ist das problem, das die 
PWM bzw. der Timer anscheinend nichts macht. Leider kann ich den Fehler 
nicht weiter eingrenzen. Ein Hardware Fehler kann ich jedoch 
ausschließen, da die LED funktioniert wenn ich sie direkt ansteuere.

Ebenfalls habe ich versucht das Beispiel selbst auf dem Mikrocontroller 
laufen zu lassen, dabei fiel mir auf, dass die LED ebenfalls nicht 
leuchtet. Ich hoffe ihr könnt mir dahin gehend helfen den Fehler zu 
finden. Achja für den Test benutze ich das discoveryboard von STM. Anbei 
habe ich den Sourcecode (zT. gekürzt als Anhang mit angehängt).
Vielen Dank für eure Mühen.
Angehängte Dateien:
OP Persönliche Seite #2278284
Lesenswert?

Hallo A.K. hmm ja AFIO läuft das war dummerweise in dem Sourcecodeteil 
den ich gekürzt habe. Jedoch hängt der Timer und die GPIO's an APB1, 
AFIO ist aber nur auf APB2 definiert - der ist aktiv (wird im 
button-init aktiviert) von daher könnte es leider nicht daran liegen. 
Damit auch wirklcih alle erforderlichen Daten vorhanden sind, hänge ich 
einfach mal die gesamte Datei an.
Angehängte Dateien:
OP Persönliche Seite #2278293
Lesenswert?

A.K. ich habs auch grad gesehen - damit bestätigt sich mal wieder, der 
Fehler sitzt meist 50 cm vor dem Bildschirm.
Aber ein kleines Problem habe ich noch und zwar soll ein Interrupt 
ausgelöst werden, nachdem der Timer ein Outputcompare hat, jedoch habe 
ich in der Library nichts entsprechendes gefunden halt nur Capture 
Compare aber das ist ja eigentlich das falsche - oder versehe ich mich 
da grad?
Und wenn ich richtig Liege wie heißt dieser Interrupt in der Library?

Und hab vielen Dank für deine Hilfe.
#2278729
Lesenswert?

Hier ein Bsp. wie ich meine LED Hintergrundbeleuchtungen mit Timer 3 / 2 
Kanäle ansteuere. Takt ist 72 MHZ, STM32F103RE:
1
// ***********************************************************************
2
// PWM Initialisierung LCD- und TFT-Hintergrundbeleuchtung
3
// Timer 3, Kanal 3 (TFT), Kanal 4 (LCD)
4
// Signal: TFTLED, LCDLED
5
// ***********************************************************************
6
void init_pwm_tftlcd (void) {
7
#define TIMER_TAKT3 1000000  /* Timer wird mit 1MHz getaktet */
8
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
9
  TIM_OCInitTypeDef  TIM_OCInitStructure;
10
  uint16_t PrescalerValue;
11

12
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);              // TIMER 3 Takt freigeben
13
  PrescalerValue = (uint16_t) (SystemCoreClock / TIMER_TAKT3) - 1;   // Vorteiler berechnen
14

15
  // Timer Grundkonfiguration
16
  TIM_TimeBaseStructure.TIM_Period = 1000;  // Timer zählt von 0 .. 1000 entspricht 1kHz PWM-Grundfrequenz
17
  TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
18
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
19
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       // Zählrichtung (hoch)
20
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);                   // Timer einstellen
21

22
  // PWM1 Mode Configuration: Kanal 3 PB0=TFTLED
23
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
24
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
25
  TIM_OCInitStructure.TIM_Pulse = 0;                              // Dutty-Cycle:
26
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
27
  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
28
  TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
29

30
  // PWM1 Mode Configuration: Kanal 4 PB1=LCDLED
31
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
32
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
33
  TIM_OCInitStructure.TIM_Pulse = 0;                              // Dutty-Cycle:
34
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
35
  TIM_OC4Init(TIM3, &TIM_OCInitStructure);
36
  TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
37

38
  TIM_ARRPreloadConfig(TIM3, ENABLE);
39
  TIM_Cmd(TIM3, ENABLE);
40
}
41

42
...
43

44
// ***********************************************************************
45
// TFT/LCD Hintergrundbeleuchtung - Helligkeit einstellen
46
// Übergabe: anzeige:    0=TFT, 1=LCD
47
//           helligkeit: 0 ... 1000 (0=Aus, 500=50%, 1000=Max.)
48
// ***********************************************************************
49
void set_hgbl (uint8_t anzeige, uint16_t helligkeit) {
50
  TIM_OCInitTypeDef  TIM_OCInitStructure;
51

52
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
53
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
54
  TIM_OCInitStructure.TIM_Pulse = helligkeit;
55
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
56

57
  if (anzeige) {
58
  // TFT Hintergrundbeleuchtung
59
    TIM_OC3Init(TIM3, &TIM_OCInitStructure);
60
  } else {
61
    // LCD Hintergrundbeleuchtung
62
    TIM_OC4Init(TIM3, &TIM_OCInitStructure);
63
  }
64
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren