Gast
#3665882
Ich habe versucht diese (Beitrag "STM32F4 - USART3 Rx und DMA will nicht") USART + DMA Implementierung vom STM32F4 auf meinem STM32L151 zu übertragen, allerdings eher schlecht als Recht... Primär geht es mir dabei um das Versenden, den Empfangsteil habe ich noch gar nicht weiter getestet Im Anhang der Beispielcode an welchem ich das Prinzip verstehen will, es meiner Meinung nach auch bereits verstanden habe aber mir nicht erklären kann warum es trotzdem nicht funktioniert. Der Code (z.B. das delay) ist nicht schön aber ist ja nur zum Test. Ich verstehe das so: Ins CNDTR Register (Anzahl der Bytes die noch gesendet werden müssen) schreibe ich eine Zahl, z.B. 17 da mein Array maximal so viele Zeichen enthalten kann. Der DMA beginnt danach von der eingestellten Anfangsadresse (&sendingUSART) die Daten über USART rauszuschreiben und erhöht die Speicheradresse 17 mal und reduziert CNDTR dabei, bis das Ende des Arrays erreicht ist. CNDTR steht damit auf 0, was ich danach über DMA_GetCurrDataCounter(DMA1_Channel7) auslesen könnte. Setze ich nun CNDTR wieder beginnt das Spiel von vorne, oder? In der Main-Schleife beschreibe ich ein char Array mit 17 Zeichen mit unterschiedlichen Werten. Diese werden dann an ein anderes Gerät geschickt, dass die Zeichen - je nach Parameter LV oder AL - auf einem Display anzeigt. Das ganze ist ohne DMA schon ausgiebig getestet, das Problem muss also bei meiner USART/DMA Implementierung liegen... Anfangs wurden zwar Nachrichten verschickt, aber scheinbar willkürlich nur eine der beiden. Es wurde also für 5 Sekunden nur der LV Wert neu gesendet, das Senden des AL Wertes zwar aufgerufen aber eben nicht verschickt. Danach ging es mal wieder ein paar Sekunden andersrum weiter. Aktuell kommt auf meinem Display leider gar nichts mehr an und so langsam bin ich auch blind für den Code -.-