hallo, ich hab da eine Frage. ich programmiere einen STM32 und hänge da seit ein paar tagen am I2C bus fest. prinzipiell läuft der Bus ohne probleme, aber ab und zu kommt es dazu, dass der Bus Busy ist und sich dadruch die Software aufhängt und nix mehr funktioniert, da er in einer While schleife fest hängt. ein reset im debug modus hilft leider nix, der bus ist dann imer noch busy. erst wenn ich die Platine mit dem STM32 von der Versorgungsspannung trenne und wieder neu starte ist alles wieder ok. weis jemand woran das liegt und was man da machen kann? ich benuts die Standart Lib des STM32
Hallo, kannst du den Bus mitloggen um zu sehen wieso er busy wird? Um die while-Schleife weg zu bekommen koenntest du das ganze auf Interrupts umstellen. Gruss
Die Methode hier habe ich bei WaveShare geklaut, einfach die Events auswerten und mit nem Timeout arbeiten:
1 | timeout = I2C_Timeout; |
2 | while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) { |
3 | if((timeout--)==0) { |
4 | return 0xFF; |
5 | }
|
6 | }
|
Anstatt dem return 0xFF kann man sich auch eine Meldung per USART schicken lassen oder sowas.
aber wenn ich die while schleife abbreche bleibt er ja weiterhin busy, wenn ich im debug modus bin und resete bringt es ja nichts. ich muss die spannungsversorgung kurz weg nehmen damit der bus wieder läuft
peter müller schrieb: > ich muss die spannungsversorgung kurz weg nehmen damit der bus wieder > läuft Aus der I2C Spec: > If the data line (SDA) is stuck LOW, the master should send nine clock > pulses. The device that held the bus LOW should release it sometime > within those nine clocks. MfG Klaus
Klaus schrieb: > peter müller schrieb: >> ich muss die spannungsversorgung kurz weg nehmen damit der bus wieder >> läuft > > Aus der I2C Spec: > >> If the data line (SDA) is stuck LOW, the master should send nine clock >> pulses. The device that held the bus LOW should release it sometime >> within those nine clocks. > > MfG Klaus was willst du mir bitte damit sagen?
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.