Hallo, ich habe folgendes vor: Auf einem Board sollen sich zwei Microcontroller (STM32F373) befinden. Der Eine soll einen Schrittmotor ansteuern, der Andere soll Kommunikationsschnittstellen zum PC (USB, CAN) bereitstellen. Die Kommunikation der Controller untereinander soll per USART laufen. Damit sich die beiden nicht "in die Quere" kommen, soll ein Handshake über digitale IOs laufen. Meine Frage lautet nun, hat schon jemand Erfahrung mit dieser Art der Kommunikation und kann mir sagen, worauf ich achten muss, bzw. wie man das am besten umsetzt. Oder kennt jemand einen guten Artikel/Tutorial? Danke bereits im Voraus!
Handshake? Wozu? Bei USART-Kommunikation kommt sich niemand "in die Quere". Jeder kann jederzeit senden und jederzeit empfangen. Blackbird
Die Handshake-Leitungen verstehe ich auch nicht! So etwas verwirklich ich immer wie folgt: 1.) Einer wird "Master" 2.) Master pollt Slave, ober er Daten hat, Wenn ja sendet Slave Daten. 3.) Master Sendet Daten an Slave sicherheitshalber immer eine CRC und dann passt das schon. mfg Dirk
Master - Slave kann man machen, ist bei nur 2 Teilnehmern aber nicht erforderlich. Wer was zu "sagen" hat, sendet. Blackbird
Ist nur etwas aufwendiger zu programmieren, als ein M-S -System. Und wer bei der Aufgabenstellung mit HW-Handshake arbeiten möchte......
Ich denke im Moment über das gleiche Patent nach, zwischen zwei AVRs über Optokoppler. Ich würd da auch einfach senden, den Rest machen die Interrupts.
Dirk H. schrieb: > Ist nur etwas aufwendiger zu programmieren, als ein M-S -System. Nicht ... wirklich Denn auch in einem M-S System muss gewährleistet sein, dass das restliche System nicht steht, nur weil sich der M mit dem S gerade was aushandelt.
:
Bearbeitet durch User
Vom Prinzip ist das ja klar mit den Interrupts. Nur bekommst du einen pro Zeichen. Jetzt musst du nur eine State-Machine bauen, die genau weiß, das du gerade auf eine Antwort wartest, oder ob es eine fremdmotivierte Nachricht vom Gegenpart ist. Alles machbar aber etwas mehr Aufwand. Ich mache es fast immer mit dem Polligen verfahren. Also einfaches simples Protokoll. Master Sendet: "?" Zurück kommt 0 oder die Anzahl der Daten die dann kommen + CRC. Master Sendet: "!"+Anzahl der Daten, gefolgt von den Daten + CRC ggfs. kann man noch ein ACK und NAK definieren.
Was mein Plan war: Maximal 255 Byte pro Telegramm werden wohl reichen. Also erstes Byte Länge des Telegramms, danach die Nutzdaten und 1-2 Byte Prüfsumme. Das lege ich erstmal so wie es ist in den Speicher ab und wenn es korrekt empfangen wurde sende ich ein ACK-Telegramm zurück und übergebe die Daten an das Hauptprogramm. Wenn nach dem Senden kein ACK kommt, kann der Sender sein Telegramm nach kurzer Zeit wiederholen.
Karl Heinz schrieb: > Denn auch in einem M-S System muss gewährleistet sein, dass das > restliche System nicht steht, nur weil sich der M mit dem S gerade was > aushandelt. Der STM soll für USART DMA unterstützen: Beitrag "STM32F4 USART und DMA"
OK, danke schon mal an alle für die vielen Antworten, dass hilft mir schon weiter... Die Idee mit dem Handshake war, dass der Master dem Slave sagt, wann er senden darf. Das kommt daher, das auf dem Master evt. zeitkritische Sachen laufen und der Slave den Master nicht durch eine Kommunikation stören soll.
Das müßten dann schon sehr zeitkritische Sachen sein, damit der USART Recieve Interrupt da auffällt. Der soll ja nichts weiter machen als das empfangene Byte aus dem Puffer in den Speicher kopieren und prüfen ob das Telegramm vollständig ist. Wenn ja, dann noch ein Flag setzen, damit sich das Hauptprogramm bei der nächsten Gelegenheit darum kümmert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.