stm32f4, libopencm3 remap des NJTRST

OP #7559459
Lesenswert?

Peinlich, peinlich...

Jetzt werkel ich schon eine Weile mit STM32 und libopencm3, und weiß wieder mal, dass ich nichts weiß.

Ich portiere gerade einiges von STM32F103 nach STM32F4xx und stehe da gerade vor einem Problem, dass ich nicht herausbekomme, wie ich Anschlüsse des JTAGS als GPIO umkonfiguriere

Beim STM32F103 war das bspw. mit

gpio_primary_remap(0x00300200, AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_ON); gpio_primary_remap(0x00300200, AFIO_MAPR_SWJ_CFG_JTAG_OFF_SW_OFF);

möglich, die Function des JTAGS an-, bzw. auszuschalten.

Jetzt habe ich das Problem, dass ich Peripheriehardware der bisherigen Elektronik weiternutzen möchte und zu meinem Unglück habe ich an PB4 etwas angeschlossen.

Beim STM32F4 ist dort gleichzeitig NJTRST aufgelegt und mit dem Einschalten ist PB4 nicht verfügbar. Ich beschreibe den STM32F4 mittels Bootloader und benötige die Funktion nicht.

gpio_set_af(GPIOB, ...

Funktioniert natürlich nicht, weil ich hier ja nur die Alternated Functions wählen kann, jedoch nicht den GPIO Anschluss.

Wie kann ich hier also mit libopencm3 NJTRST auf PB4 ummappen?

OP #7562091
Lesenswert?

Uwe B. schrieb:

alls Du Jtag benutzen willst, darfts Du NJTRST remappen. Das ist ein ewiger Fehler bei den STM32.

Wie ich bereits sagte: Ich arbeite mit dem DFU Bootloader und benötige JTAG nicht. Grundsätzlich habe ich jetzt die Hardware geändert, allerdings würde mich die Lösung des Ausgangsproblems schon interessieren.

Uwe B. schrieb:

gpio_mode_setup() und gpio_set_af()

Das funktioniert nur, wenn du bspw. an einem Pin die Alternated Function für ein SPI Anschluß benötigst. Der Anschluß PB14 ist jedoch als Port nicht als AF aufgeführt und und kann somit auch nicht mittels gpio_set_af als GPIO gemappt werden... Leider.

Aber wie gesagt, ich hab meine Hardware geändert.

#7562101
Lesenswert?

Ralph S. schrieb:

Der Anschluß PB14 ist jedoch als Port nicht als AF aufgeführt und und kann somit auch nicht mittels gpio_set_af als GPIO gemappt werden

mit gpio_set_af() nicht, aber mit gpio_mode_setup(). Per MODE Register wählt man für jeden Pin GPIO-IN/GPIO-OUT/AF/ANALOG mit 0/1/2/3. Mit Mode=0 ist die AF-Einstellung egal, mit MODE=2 und AF=0 bekommt man JTRST und mit AF=5 z.B. SPI1_MISO.

Wieder ein schönes Beispiel, warum Programmierung auf Registerebene nach Reference Manual einfacher ist, als fremde Libs.

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