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?