Forum: Mikrocontroller und Digitale Elektronik STM32 HAL PWM Output


von PWMler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Was ich möchte:
Eigentlich ganz simpel nur ein PWM Signal am Pin eines uC. (Duty Cycle 
ist erstmal egal)

Was ich gemacht habe:
Ich verwende den STM32F070CB mit HAL. Mit Cube hab ich mir den 
Initialisierungscode generieren lassen. (PB9 / TIM17_CH1)

Das ganze starte ich dann mit dem Befehl
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);

Nur leider tut sich nichts.
Wenn ich aber den Code im Debugger laufen lasse, kann ich meinen PWM am 
Ausgang mit dem Oszi messen.

Ich vermute, ich habe irgendetwas bei der Initialisierung vergessen, das 
der Debugger von sich aus macht, vermutlich irgendeine CLK Zuweisung. 
Was ich noch versucht habe ist mit den Makros 
__HAL_RCC_GPIOB_CLK_ENABLE(); und __HAL_RCC_TIM17_CLK_ENABLE();
den Clock des Timermoduls zu aktiveren, hat aber auch nichts gebracht.

Hat jemand eine Vermutung an was das liegen könnte?

Ich habe meine Einstellungen im Cube und das Main file angehängt

Grüsse

von Stefan F. (Gast)


Lesenswert?

Hast du die GND Leitung deines Messgerätes mit dem Mikrocontroller 
verbunden?

von Harry L. (mysth)


Lesenswert?

Ich hab zwar mit dem F070 keine Erfahrungen, aber versuch mal mit 
"auto-reload preload" enable.

von Christopher J. (christopher_j23)


Lesenswert?

Harry L. schrieb:
> Ich hab zwar mit dem F070 keine Erfahrungen, aber versuch mal mit
> "auto-reload preload" enable.

Damit hat es garantiert nichts zu tun, weder beim F070, noch bei 
irgendeinem anderen STM32.

Ich tippe mal auf MOE-Bit im BDTR vom TIM17 nicht gesetzt, dass lässt 
CubeMX nämlich (mWn) bei Timern mit Deadtime-Funktion weg. Probier mal 
ein

TIM17->BDTR |= TIM_BDTR_MOE;

Für die Erklärung siehe S.464 im Reference-Manual RM0360.

Wenn es nicht (bzw. nicht nur) am MOE-Bit liegt, dann tippe ich auf 
fehlende GPIO-Konfiguration (Output Alternate-Function, Push-Pull, etc), 
da ich die bei dir nirgends erkennen konnte. Auch da hilft ein Blick ins 
Handbuch.

Ich würde unbedingt empfehlen zuerst mal für die Peripherie und 
insbesondere für die Timer CubeMX und HAL wegzulassen und direkt über 
die Register zu programmieren. Es gibt von ST einen Haufen Beispielcode, 
genannt "STM32F0 Snippets" den du auf deren Webseite herunterladen 
kannst und der explizit für die F070-Reihe geschrieben ist. Dazu dann 
das entsprechende Kapitel im Reference-Manual lesen und du verstehst was 
das Ding kann und wie die Dinge zusammenhängen.

Für die ersten Gehversuche mit PWM würde ich mir aber einen Timer 
nehmen, der die Break- und Deadtime-Funktionalität nicht hat. Das ist 
einfach übersichtlicher im Handbuch (und natürlich auch bei CubeMX).

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.