Forum: Mikrocontroller und Digitale Elektronik [STM32G0B1RE] PWM per DMA richtige Pulsdauer, falsche Periodendauer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von DMA (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

was wird benutzt:
Nucleo Board vom STM32G0B1RE;
Interner Sourceclock von 32MHz

Was ist das Ziel:
ein 800kHz PWM-Signal per DMA ausgeben um die WS2812b ansteuern zu 
können.

Was ist eingestellt (siehe Bild "TIM15_Einstellungen.png"):
TIM15 mit PWM Ausgabe am Channel 1 durch DMA;
Prescaler auf 1 -> 32MHz / 2 = 16MHz;
ARR auf 19 -> 16MHz / 20 = 800kHz;
(So zumindest meine Rechnung)

Was bekomme ich:
Eine Pulsdauer die einem 800kHz Signal entspricht mit einer Periode, die 
zu einem 400kHz Signal gehört.
Getestet mit einer Pulsdauer von 50%. (siehe Bild "Signal_Oszi.png")

Ansteuerung (richtige Pulsdauer, falsche Periodenlänge):
1
uint32_t test[20] = {10,10,10,5,5,3,3,7,7,7,10,10,10,9,9,9,1,2,6,8};//10 = 50%; 5 = 20% usw.
2
HAL_TIM_PWM_Start_DMA(&htim15, TIM_CHANNEL_1, (uint32_t *)test, uint16_t)20);
3
/*HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef * htim, uint32_t Channel, uint32_t *pData, uint16_t Length)*/

Callback (funktioniert)
1
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef* htim)
2
{
3
   if(htim == &htim15)
4
   {
5
      HAL_TIM_PWM_Stop_DMA(&htim15, TIM_CHANNEL_1);
6
      ready = 1;
7
   }
8
}

Frage:
Woran könnte das liegen und wie kann ich es beseitigen?

von DMA (Gast)


Lesenswert?

Hallo zusammen,

ich habe das Problem gelöst bekommen, es war dieser Teil:
1
uint32_t test[20] = {10,10,10,5,5,3,3,7,7,7,10,10,10,9,9,9,1,2,6,8};

Die Variable mit der Pulsdauer darf keine 32 Bit Variable sein, sondern 
muss eine 16 Bit breite Variable sein, auch wenn die HAL-Funktion eine 
32Bit Variable erwartet.
Wenn ich die 16 Bit Variable auf 32 Bit caste funktioniert es, aber da 
stellt sich mir jetzt die Frage wieso?

Wieso funktioniert es erst, wenn die übergebene Variable eine gecastete 
32 Bit Variable ist ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.