Forum: Mikrocontroller und Digitale Elektronik Stm32F103C8 (Bluepill) Pin B4 und B5


von Tomas pk. (Gast)


Lesenswert?

Hallo,
gibt es beim Stm32F103 an Pin 4 eine Besonderheit?
Obwohl ich den als AUsgang konfiguriert habe, funktionieren er nicht wie 
gewünscht um Enable vom LCD zu steuern.

Muss da noch ein register gesetzt werden?

von Tomas pk. (Gast)


Lesenswert?

Ich sehe gerade der muss remapped werden:-(
Wie macht man das ohne HAL?

von Stefan F. (Gast)


Lesenswert?

Tomas pk. schrieb:
> Ich sehe gerade der muss remapped werden:-(

Wie kommst du darauf? Welche komplexe I/O Schnittstelle willst du denn 
auf diesen beiden Pins fahren? Es geht ja nur entweder GPIO oder SPI, 
aber dann reden wir von PA15 und PB3 bis PB5).

Wie dem auch sei, das Remappen tut man durch beschreiben des AFIO->MAPR 
Registers.

Siehe dazu http://stefanfrings.de/stm32/stm32f1.html#bluepill

von Tomas pk (Gast)


Lesenswert?

Nix aufwendiges.
Selbst ein LED Blinken ist ohne nicht möglich.
Ales anderen B Ports gehen, nur eben B4 nicht

von Johannes S. (Gast)


Lesenswert?

Nicht jeder Pin ist gpio nach reset. Siehe Datasheet Seite 32.

von Planloser (Gast)


Lesenswert?

Tomas pk. schrieb:
> Ich sehe gerade der muss remapped werden:-(
> Wie macht man das ohne HAL?
1
    uint32_t x = AFIO->MAPR;
2
    x &= ~AFIO_MAPR_SWJ_CFG;
3
    x |=  AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
4
    AFIO->MAPR = x;

für "JTAG-DP Disabled and SW-DP Enabled".

von Pille (Gast)


Lesenswert?

1
// DISABLE JTAG, Enable SWD
2
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
3
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // Disable JTAG/SWD so pins are available

Pille

von Stefan F. (Gast)


Lesenswert?

Ach so jetzt schnalle ich, was er will. Also nichts remappen, sondern 
JTAG deaktivieren. Das ist auf der selben Seite beschrieben: 
http://stefanfrings.de/stm32/stm32f1.html#swjdisable

Entspricht im Prinzip den beiden vorherigen Vorschlägen.

von Tomas pk. (Gast)


Lesenswert?

Ahhh, super danke. So funktionierts:-)
1
// Enable clock for alternate functions
2
  RCC_APB2ENR.B0:=1;
3
4
// Disable both SWD and JTAG to free PA13, PA14, PA15, PB3 and PB4
5
       AFIO_MAPR.B25:=1;

von Stefan F. (Gast)


Lesenswert?

Tomas pk. schrieb:
>  AFIO_MAPR.B25:=1;

Was ist das für eine Programmiersprache?

von Stefan F. (Gast)


Lesenswert?

Johannes S. schrieb:
> Nicht jeder Pin ist gpio nach reset. Siehe Datasheet Seite 32.

Nein, die SWJ Schnittstelle ist die eine Ausnahme, auf die Tomas 
gestoßen ist.

von Tomas pk. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Tomas pk. schrieb:
>>  AFIO_MAPR.B25:=1;
>
> Was ist das für eine Programmiersprache?

Pascal
 bzw Pascal von Mikroe

von Johannes S. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nein, die SWJ Schnittstelle ist die eine Ausnahme,

Nö, das ist nicht falsch sondern allgemeiner formuliert. Was ist mit 
PB9? Das ist auch kein normaler gpio. Es ist nicht üblich das alle IO 
sich gleich verhalten und das sollte man im Datenblatt prüfen. Die PCx 
sind 'schwächer' als andere IO, nicht alle sind 5V tolerant, andere µC 
können den Reset umprogrammieren. Auch tückisch sind echte I2C Pins mit 
open drain ohne Pull Up (haben die LPC z.B.). Und auch beim AVR Mega32 
war ein FAQ 'warum funktioniert mein PortC nicht richtig?'.
Nur auf SWJ/JTAG zu achten reicht nicht.

von Stefan F. (Gast)


Lesenswert?

Johannes S. schrieb:
> Was ist mit PB9?

Ja was denn? Ich würde sagen, es ist nach dem Reset ein normaler GPIO 
Pin.

> Nur auf SWJ/JTAG zu achten reicht nicht.

Sicher. Wenn du dir meine Webseite angesehen hättest, dann wäre dir 
aufgefallen, dass ich dort auf alle von dir genannten Ausnahmen 
hinweise.

Außer auf PB9. Was habe ich versäumt?

von Johannes S. (Gast)


Lesenswert?

Das ist nur ein Input und der beeinflusst das Bootverhalten, darf also 
auch nicht einfach als normaler gpio betrachtet werden.

von NichtWichtig (Gast)


Lesenswert?

Wie immer: RTFM

:-)

von Stefan F. (Gast)


Lesenswert?

Johannes S. schrieb:
> Das ist nur ein Input und der beeinflusst das Bootverhalten, darf also
> auch nicht einfach als normaler gpio betrachtet werden.

NichtWichtig schrieb:
> Wie immer: RTFM

Wo denn? Ich habe gerade zum 3. mal ins Datenblatt und ins 
Referenzhandbuch geschaut und keine besonderen Hinweise zu PB9 gefunden.

Nach meinem Kenntnisstand wird der Bootloader durch die Pins Boot0 und 
Boot1 (=PB2) gesteuert. Den PB2 kann man trotzdem als normalen 
vollwertigen GPIO nutzen.

von Johannes S. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wo denn? Ich habe gerade zum 3. mal ins Datenblatt und ins
> Referenzhandbuch geschaut und keine besonderen Hinweise zu PB9 gefunden.

kannst du auch nicht, hatte noch ein zweites DaBla zu einem STM32L offen 
und bei dem war es so :)
Trotzdem bleibt für mich das DaBla die Referenz, die Tabelle 5 ist jetzt 
nicht so unübersichtlich.

von Stefan F. (Gast)


Lesenswert?

Johannes S. schrieb:
> kannst du auch nicht, hatte noch ein zweites DaBla zu einem STM32L offen
> und bei dem war es so :)

Ach so. Kann passieren.

von Tomas pk. (Gast)


Lesenswert?

Zum Thema Programmiersprache.
Bei dem Pascal könnt man auch mit
AFIO_MAPR
oder direkt
RCC_APB2ENR oder direkt AFIOEN_bit
und
SWJ_CFG1_bit

nehmen.
falls noch jemand damit arbeitet

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.