DMA Stm32 Usart

Gast #4646370
Hallo,

ich wollte mein Counter vom DMA Stream resetten oder auf ein bestimmten 
Wert schreiben, ohne den Stream neu zu initialiseren.

Ich mache es aktuell so:

// Dma deaktivieren.
DMA_Cmd(Handle->usart_board->ReceiverDmaStream, DISABLE);

// Flags löschen.
USARTGetDma( Handle->usart_board->ReceiverDmaStream )->LISR = 
0x00000000;
USARTGetDma( Handle->usart_board->ReceiverDmaStream )->HISR = 
0x00000000;
USARTDmaClearAllFlags( Handle->usart_board->ReceiverDmaStream );

// Counter umsetzen auf die übergebene Anzahl.
DMA_SetCurrDataCounter(DMA2_Stream6, (uint16_t) (Handle->rxSize));

// Dma wieder aktivieren
DMA_Cmd(Handle->usart_board->ReceiverDmaStream, ENABLE);

_________________________________________________________
Handle->usart_board->ReceiverDmaStream ist mein aktueller DMA Stream.
Handle->rxSize ist meine aktuelle Size auf die der Counter vom DMA 
gesetzt werden soll.
Die Funtkion "USARTDmaClearAllFlags" löscht die Flags DMA_FLAG_FEIFx, 
DMA_FLAG_DMEIFx, DMA_FLAG_HTIFx und DMA_FLAG_TCIFx Flag von dem 
jeweiligen DMA Stream.

Aktuell ist mein Problem, dass der DMA Stream manchmal nicht gleich 
wieder aktiviert wird und das ich vom USART ein OverRun Error bekomme.

Könnt Ihr mir vielleicht helfen wo mein Fehler ist?
#4646378
z.b. hier:
"If the stream is enabled, disable it by resetting the EN bit in the 
DMA_SxCR register, then read this bit in order to confirm that there is 
no ongoing stream operation. Writing this bit to 0 is not immediately 
effective since it is actually written to 0 once all the current 
transfers have finished. When the EN bit is read as 0, this means that 
the stream is ready to be configured."
Gast #4646517
Hallo,

Danke für die schnelle Antwort.
Ich habe es jetzt so umgesetzt und auch nochmal in der Dokumentation 
nachgelesen und es funktioniert. Dankeschön hat mir viel geholfen : )

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.