Forum: Mikrocontroller und Digitale Elektronik STM32: PortPin als Input


von Bernd S. (mms)


Lesenswert?

Hallo,

möchte gern am STM32F103 einen Pin als Ausgang (Floating) konfigurieren:

PE15:
1
RCC->APB2ENR |= (1<<6);               // enable peripheral clock for GPIOC
2
GPIOE->CRH &= ~0xF0000000;                /* clear port PE15 */
3
GPIOE->CRH |= 0x40000000;                /* PE15 input floating */
4
GPIOE->CRH |=  0x00000000;                /* input mode */

Wenn nichts am Pin hängt, ist dieser low; was ja auch stimmt.

Wenn ich einen Pullup 10k sowie einen externen Open-Drain Output 
anschließe (vom AD7843 PIRQ) ist die Line auch dann high, wenn der 
Open-Drain Output versucht, dass Potential auf low zu ziehen...

Der Open-Drain Output vom AD7843 schafft es allerdings problemlos die 
Line auf low zu ziehen (mit dem Pullup 10k), wenn der STM32 nicht 
angeschlossen ist...

Hab ich software-technisch was vergessen zu konfigurieren, oder könnte 
es ein Hardware-Problem (Port-Pin) sein?

Den Pin vom STM32 selbst kann ich als Output konfigurieren, auf high und 
auf low ziehen; Wenn ich ihn als Input mit Pullup konfiguriere, dann ist 
dieser ohne Last auch auf high (mit Last kann ich ihn ebenfalls nicht 
auf low ziehen mit dem AD7843)

Gruß
Bernd

von (prx) A. K. (prx)


Lesenswert?

Etwas verwirrend. Du schreibst von Output und programmierst laut 
Kommentar einen Input.

von Bernd S. (mms)


Lesenswert?

>möchte gern am STM32F103 einen Pin als Ausgang (Floating) konfigurieren:

stimmt, hier muss Input Floating stehen, nicht Output!

von (prx) A. K. (prx)


Lesenswert?

Wenn du einen Input ohne internem Pullup extern nicht runterziehen 
kannst, dann hat das wenig mit dem STM32 zu tun und viel mit dem 
externen Signal.

Ich habe allerdings deine Bits nicht kontrolliert, also ob die Werte 
auch dem entsprechen, was im Kommentar steht.

> auf low ziehen; Wenn ich ihn als Input mit Pullup konfiguriere, dann ist
> dieser ohne Last auch auf high (mit Last kann ich ihn ebenfalls nicht
> auf low ziehen mit dem AD7843)

Weitere Verwirrung: Was ist eine Last an einem Input?

von Bernd S. (mms)


Lesenswert?

Ich hab an einem Pin vom STM32 (PE15) den PIRQ Interrupt vom AD7843 
hängen. PE15 stellt einen floating Input dar (STM32) und PIRQ ist ein 
Open-Drain Output. Zusätzlich hab ich einen 10k Pullup installiert, 
Open-Drain Ausgang.

Wenn ich jetzt versuche, die Line auf low zu ziehen (mit dem STM32), 
misslingt dieses Vorhaben. Über einen Jumper kann ich den STM32 vom 
AD7843 trennen; ist dieser Jumper offen, zieht der AD7843 die Line 
entsprechend auf low (sprich der AD7843 funktioniert auf jeden Fall).

von (prx) A. K. (prx)


Lesenswert?

Bernd Schuster schrieb:

> Wenn ich jetzt versuche, die Line auf low zu ziehen (mit dem STM32),

Du willst also einen auf Input konfigurierten Pin mit dem STM32 selbst 
runter ziehen? Da wird sich natürlich nichts rühren, deswegen ist es ja 
ein Input.

von Bernd S. (mms)


Lesenswert?

nein der PIRQ generiert einen Interrupt, der die Line auf Low zieht;

von (prx) A. K. (prx)


Lesenswert?

Programmiere ihn als Output auf "low", ohne PIRQ dran. Wenn's dann 
blitzt und donnert, dann hast du einen Kurzschluss am Pin ;-).

Im Ernst: Wenn du den Pin mit seinem 10K Pullup um einen 10K Pulldown 
anreicherst, und keine gemessene VCC/2 rauskommen, dann solltest du die 
Verschaltung und ggf. die Leiterbahnen mal unter die Lupe nehmen.

von Bernd S. (mms)


Lesenswert?

haben die Pins vom STM32 intern nur einen 10k Pullup/Pulldown 
Widerstand? Kann diese Angabe grad im Datenblatt nicht finden.


Habs grad ausprobiert, mit einem externen Pullup von 10k landet die 
Spannung ungefähr bei 2.5V (nominal 3.3V).

Gruß
Bernd

von (prx) A. K. (prx)


Lesenswert?

Wenn ein Input mit Pullup ohne weitere bekannte Beschaltung kein Vcc 
messen lässt, dann solltest du mal danach suchen, was ausser dem Pin 
noch an der Leitung hängt. Ob beabsichtigt oder auch nicht. Und wenn da 
wirklich nichts ist, dann den Controller tauschen.

von Bernd S. (mms)


Lesenswert?

A. K. schrieb:
> Wenn ein Input mit Pullup ohne weitere bekannte Beschaltung kein Vcc
>
> messen lässt, dann solltest du mal danach suchen, was ausser dem Pin
>
> noch an der Leitung hängt. Ob beabsichtigt oder auch nicht. Und wenn da
>
> wirklich nichts ist, dann den Controller tauschen.

Nein ich hab extern einen Pullup 10k hängen und den internen Pulldown 
vom STM32 aktiviert; dachte du meintest, dass dieser interne Pullup/down 
jeweils 10k misst.

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
Noch kein Account? Hier anmelden.