STM32F051 GPIO Output Tristate nicht möglich?

(Firma: KHTronik) #3823259
Lesenswert?

Hallo,
beim Einsatz des STM32F051 an einem seriellen Bus habe ich ein 
Protokoll, bei dem ich zuerst am Bus mithören muss, und wenn die 
richtige Adresse auf dem Bus erscheint auf der selben Leitung des Busses 
sende. Ausgang der seriellen Schnittstelle und deren Eingang wollte ich 
direkt verbinden. Dies setzt allerdings voraus, dass ich den Ausgang 
während der Erkennungsphase auf "High-Z" setzen muss. Der Versuch, den 
IO-Pin der seriellen Ausgabe nur dann zu aktivieren funktioniert 
grundsätzlich, aber bisher sind alle Versuche gescheitert, den Pin auf 
High-Z zu setzen.
Hat jemand eine Idee, wie ich einen GPIO-Pin zwischen "Serial out" und 
"High-Z" wechseln lassen kann?
Dass man einen Bustreiber mit OE verwenden kann ist mir bekannt :-).
Grüße, Kurt
Gast #3823411
Lesenswert?

>Das habe ich versucht. Das Signal am seriellen Eingangspin bricht dann
>zusammen. Genau deswegen bin ich etwas ratlos.

Dann hast du was falsch gemacht. Alle anderen hier
sind genauso ratlos wie du weil niemand sehen kann
welchen Unsinn du programmiert hast.
(Firma: KHTronik) #3823796
Lesenswert?

OK, dann also die Code-Aausschnitte zur Intialisierung und Umschaltung 
der Pin_Funktion:
Initialisierung: (Pin als Input)
1
  GPIO_InitTypeDef GPIO_InitStructure;
2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
4
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
6
  GPIO_Init(GPIOA, &GPIO_InitStructure);
Umschaltung auf TX-Pin für USART2:
1
  GPIO_InitTypeDef GPIO_InitStructure;
2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
4
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
6
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
7
  GPIO_Init(GPIOA, &GPIO_InitStructure);
8
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_1);
Umschaltung auf Input:
1
  GPIO_InitTypeDef GPIO_InitStructure;
2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
4
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
6
  GPIO_Init(GPIOA, &GPIO_InitStructure);

Da im Grundzustand, also Pin als Input, das Signal OK ist, sollte das 
Problem in der erneuten Umschaltung auf Input liegen. Ich sehe es aber 
nicht :-(.
Grüße, Kurt

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