DMA Stm32 Usart

Gast #4646370
Lesenswert?

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
Lesenswert?

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."

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