Forum: Mikrocontroller und Digitale Elektronik STM32 JTAG pins als GPIO funktionieren nicht


von STM32 debugger (Gast)


Lesenswert?

Hi,

Ich arbeite gerade mit einem STM32F103C8T6, und versuche den PB3 als 
GPIO zu verwenden. Ich habe JTAT & SW  deaktiviert, allerdings 
funktioniert nur PB4 als output, PB3 nicht.

Hier mein code:

RCC->APB2ENR |=(1<<3);         /* Enable GPIOB clock                 */
RCC->APB2ENR |=1;              /* Enable AFIO clock                  */

  //disable JTAG ->
  AFIO->MAPR |= (1<<26);

  // set GPIOBL
  GPIOB->CRL = 0x333AA333;

was mache ich falsch?

Danke für eure Hilfe!

von tom (Gast)


Lesenswert?

...schau mal, was für diese pins als default funktion gilt 
(wahrscheinlich jtag/swd ;o), du musst die alternate I/O funtionen (in 
dem fall gpio) per SW aktivieren.

gutt lack, tom.

von STM32 debugger (Gast)


Lesenswert?

Hi Tom,

Danke für deine Hilfe. Ich dachte mit

AFIO->MAPR |= (1<<26);

wird das JTAG interface abgeschalten, und somit für GPIOs zugägnlich?

und mit
GPIOB->CRL = 0x333AA333;

setze ich PB3 und PB4 als alternate port function push/pull

das sollte so doch stimmen oder?

Un dwie gesagt, PB4 funktioniert eindwanfrei, nur PB3 eben nicht.

von STM32 debugger (Gast)


Lesenswert?

Ein Fehler meinerseits - auch PB4 funktioniert nicht

von STM32 debugger (Gast)


Lesenswert?

Hat noch jemand eine Idee dazu?

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Für AFIO Bits 26:24 steht:
These bits are write-only (when read, the value is undefined
Damit ist
AFIO->MAPR |= (1<<26);
nicht so besonders schlau.

Probier mal
uint32 x = AFIO->MAPR;
x &= ~AFIO_MAPR_SWJ_CF;
x |=  AFIO_MAPR_SWJ_CFG_DISABLE;
AFIO->MAPR = x;

von tom (Gast)


Lesenswert?

...probier es doch mal mit der FW-LIB von ST und schau was wie gesetzt 
werden muss registermässig.

das alternate pin mapping ist meines Erachtens nach in diesem fall nicht 
nötig, du musst lediglich für dieses portpin die alternate function 
anstelle der default auswählen, in dem fall die gpio pin funktion.

btw, Jtag UND SWD zu deaktivieren ist doch etwas unblickig, oder ?

du solltest erstmal SWD aktiv lassen und dich mit der konfiguration des 
SWO pins PB3 als gpio versuchen, der debugger braucht nur SWD und 
SWCLK...

gutt lack, tom.

von Phantomix X. (phantomix)


Lesenswert?

Hallo!
Da ich das selbe Problem hier schon hatte, kann ich sagen dass das hier 
bei mir funktioniert hat:
1
  //DISABLE JTAG, Enable SWD
2
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
3
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // Disable JTAG/SWD so pins are available
du brauchst, soweit ich weiß, GPIOB, AFIO und dann das Remap

von STM debugger (Gast)


Lesenswert?

Hi,

danke für eure Tips.

Für AFIO Bits 26:24 steht:
These bits are write-only (when read, the value is undefined
Damit ist
AFIO->MAPR |= (1<<26);
nicht so besonders schlau.


danke, den fehler hab ich bis jetzt konsequent ignoriert ;)
Ich hab allerdings auch schon AFIO->MAPR = 0x04000000; versucht - ohne 
Erfolg.

JTAG und swd benutze ich nicht - daher kein problem die zu deaktivieren.
hat jemand von euch die ST lib in Keil schonmal verwendet?
Wie kann ich die am besten einbinden? SIeht ja so aus als müsste ich 
alle headerfiles separat reinklopfen, um auf alle Funktionen zugreifen 
zu können.
Danke nochmal für Eure Hilfe.

von tom (Gast)


Lesenswert?

...nimmd dir eins der vielen vielen beispielprojekte

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Phantomix X. schrieb:
> //DISABLE JTAG, Enable SWD
>   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
> RCC_APB2Periph_AFIO, ENABLE);
>   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // Disable
> JTAG/SWD so pins are available

Ist zwar schon ein paar Jahre alt, aber hat bei mir auch geholfen ;-)

Bin gespannt, ob noch mehr solche Überraschungen auftauchen ...^^

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.