Hallo Zusammen,
Ich habe hier ein kleines Testsystem mit zwei Slaves und einem Master.
Die Kommunikation realisiere ich über UART. Der Master ist ein STM32 und
die Slaves STM8Ss.
Die Slaves lauschen auf Daten vom Master, welche an den jeweiligen Slave
adressiert sind (ID im Bytestream). Das ganze läuft für eine gewisse
Zeit sehr gut (30Sek-2Min). Danach jedoch sehen die beiden(!) Slaves mit
einem Mal keine eingehenden Daten mehr, als ob sich der UART an den
STM8ern abgeschaltet hätte (Auf der Leitung sind die Daten aber
vorhanden, - mit Oszilloskop gemessen).
Ich habe mit dem Interrupt getestet und bin nun beim pollen angelangt.
Jede Variante zeigt dieses Verhalten.
Meine Empfangsroutine startet so:
1 | /* clear new data received flag */
|
2 | UART1_ClearFlag(UART1_FLAG_RXNE);
|
3 | UART1_ReceiveData8();
|
4 |
|
5 | /* wait here for first data byte */
|
6 | while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);
|
7 |
|
8 | /* Read one byte from the receive data register */
|
9 | byValue = UART1_ReceiveData8();
|
10 |
|
11 | /* check for frame start */
|
12 | if(START_OF_FRAME == byValue)
|
13 |
|
14 | ....
|
Im Fehlerfall hängen die STMs immer beim „while
(UART1_GetFlagStatus(UART1_FLAG_RXNE)“. Wenn ich das umgehe und einfach
immer nur per UART1_ReceiveData8() ein Byte vom UART DR lese und auf
mein Frame Start Byte warte, passiert nichts -> zum Beispiel:
1 | while (UART1_ReceiveData8() != START_OF_FRAME);
|
Wenn ich nur einen STM8 allein betreibe habe ich keine Probleme. Es kann
hin und wieder vorkommen, dass beide STM8s zur selben Zeit etwas senden,
was aber vom Master erkannt wird. Könnte das ein Problem für die STM8s
darstellen? Suche ich an der falschen Stelle? Hat jemand einen Tipp?
Danke!
Grüße
Chris