2 Mikrocontroller über USART verbinden

OP #3373069
Lesenswert?

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!
#3373085
Lesenswert?

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

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.
#3373132
Lesenswert?

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.
OP #3373347
Lesenswert?

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.
#3373737
Lesenswert?

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.

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