I2C Problem beim stm32

OP #3092859
Lesenswert?

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
Gast #3092956
Lesenswert?

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

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?

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