Hi Leute ich habe mal eine Frage. Ist es im STM32F103 möglich, über DMA Zeichen von UART3 zu bekommen und sie direkt, ohne Interrupt, an UART4 zu senden und umgekehrt? Dabei ist die Zeichen länge nicht genau definiert. RX_UART3 --> DMA --> TX_UART4 TX_UART3 <-- DMA <-- RX_UART4 Ich habe gelesen das der DMA Peripheral-to-Peripheral kann. Ist das vielleicht das was ich suche und hat schon jemand damit Erfahrung? Gruß Andreas
Gast
#5770662
Also bei meinem STM32F4 ist das ohne Probleme möglich. Der Rest steht im Datenblatt deines Controllers.
Gast
#5770666
Gemacht habe ich es noch nicht. In der Referenz des STM32F103 (June 2014 DocID13902 Rev 151/1128 RM0008 Reference manual) steht als Feature: Peripheral-to-memory and memory-to-peripheral, and peripheral-to-peripheral transfers Sollte also funktionieren.
Genau Bernd, das habe ich auch gelesen. Die Frage dabei ist wie genau funktioniert das bzw. was muss ich da wie programmieren? Ich habe mit DMA noch nicht so viel Erfahrung.
Gast
#5770885
Nö. der F103 hat nur USART1 .. USART3.
Gast
#5770966
Andreas M. schrieb: > Genau Bernd, das habe ich auch gelesen. > > Die Frage dabei ist wie genau funktioniert das bzw. was muss ich da wie > programmieren? > Ich habe mit DMA noch nicht so viel Erfahrung. Du hast Riesenglück: Das steht im Reference Manual! Einfach durchlesen, Register setzen und schon läuft es. Und das Beste: Dabei bekommst Du automatisch die Erfahrung!
Gast
#5770968
pegel schrieb: > Nö. > der F103 hat nur USART1 .. USART3. Er hat nach UART gefragt. Also korrekte Antwort: Er hat je nach Modell USART1..3 und UART4..5.
Andreas M. schrieb: > Dabei ist > die Zeichen länge nicht genau definiert. das macht es schwierig. Denn beim DMA musst Du immer genau angeben wieviele Bytes transferiert werden sollen. Wenn dauerhaft einfach alles kopiert werden soll, wäre zu fragen warum Du nicht einfach die entsprechenden Pins direkt miteinander verbindest und den Controller ganz außen vor lässt.
Gerd E. schrieb: > Denn beim DMA musst Du immer genau angeben wieviele Bytes transferiert > werden sollen. Man kann den DMA auch auf Continuous mode stellen, wenn kein die Register bzw Speicherstellen immer die gleichen bleiben, ist dann auch die eingestellte Länge egal, der fängt danach einfach wieder von vorne an.
Also langsam. 1. Ja, mein STM32F103RE hat 5 UART-Schnittstellen. 2. Das mit dem direkten Verbinden geht nicht mehr da die Leiterplatte schon fertig ist. SpongeBob: ich werde das mal anschauen mit dem Reference Manual.
Gast
#5771049
dann setz den auf bytetransfer dann wird jedes byte einzeln durchgeschubst lass den NVIC aus dann kommt auch kein interrupt
Hi Leute, ich habe mir das reference Manual jetzt mal angeschaut aber so richtig werde ich nicht daraus schlau. Ich arbeite mit der Standardbibliothek und habe den UART eingebunden, die GPIOs gesetzt und den NVIC ausgeschaltet. Wie mache ich das jetzt mit dem DMA? Ich finde den bytetransfer auch nirgends.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
Gast
#5775474
Grob drübergeflogen vermute ich dass du noch folgendes berückschtigen musst: - du brauchst zwei DMA Kanäle, je einen für Rx und Tx - die Quell- bzw Ziel-Adresse des DMA-Memory muss dein jeweiliges Rx- und TX-Register sein. - der Funktionsaufruf DMA_Cmd (..) startet bereits DMA so wie du DMA vorhergehend konfiguriert hast.
Ich habe jetzt mal was hinzugefügt. Aber woher weiß jetzt der DMA das der alles was am UART1 ankommt an UART 2 geschickt werden soll und umgedreht?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.