STM32 JTAG pins als GPIO funktionieren nicht

Gast #2944150
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!
Gast #2944850
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.
(Firma: TU Darmstadt) #2945261
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;
Gast #2945393
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.
#2945496
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
Gast #2945868
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.
Persönliche Seite #4937955
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 ...^^

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