Hallo zusammen,
ich war gerade am verzweifeln. Ich verwende ein MD070SD Display mit
16Bit parallel Bus an einem STM32f103C8T6 Board, welches in der Bucht
sehr günstig zu erwerben ist, auch BluePill genannt.
https://developer.mbed.org/users/hudakz/code/STM32F103C8T6_Hello/
Jetzt ist mir aufgefallen, dass sich mein GPIOB Pin4 nicht rücksetzen
lässt.
Getestet habe ich das ganze mit zwei Boards und auch einem minnimal
Projekt (nur GPIOB Pin4).
Ist euch hierzu irgendetwas bekannt?
Ist schon jemand darüber gestolpert und weis vielleicht sogar warum das
so ist? Optisch ist mir nichts aufgefallen, dass hier ein pull up oder
dergleichen dran wäre. Komischerweise bleibt mir beim Debugen das IDR
Register immer auf 1 hängen für Pin4, obwohl ODR auf 0 geht, womit ich
auf einen externen pull up schließen würde.
wo habe ich gerade meinen Denkfehler?
Grüße,
Stephan
mein minnimal Beispiel:
Kein Bug, sondern ein "Feature".
Laut Datenblatt:
Pin name: PB4; Main function (after reset): JNTRST
Erklärung dazu im Reference Manual (RM0008), Kapitel 9.3.5:
JTAG/SWD alternate function remapping
Leo C. schrieb:> Kein Bug, sondern ein "Feature".> Laut Datenblatt:> Pin name: PB4; Main function (after reset): JNTRST>> Erklärung dazu im Reference Manual (RM0008), Kapitel 9.3.5:> JTAG/SWD alternate function remapping
super! danke für die Antwort. Darauf wäre ich wohl nie gestoßen. Mir ist
dann gleich noch aufgefallen, dass auch DB3 vor belegt ist und ich
dadurch immer ein par Grafikbuggs hatte. Nachdem ich die beiden Pins auf
PA6 und PA8 umgezogen habe scheint jetzt einwandfrei zu funktionieren.
pegel schrieb:> Dazu müsste man aber absichtlich auf JTAG umschalten.>> Meine waren original alle auf SWD.
Komisch. Kann das eventuell davon kommen, dass ich die Boards testweise
mal über den Bootloader gebrannt habe? Absichtlich habe ich nichts
umgestellt.
Steph M. schrieb:> Nachdem ich die beiden Pins auf> PA6 und PA8 umgezogen habe scheint jetzt einwandfrei zu funktionieren.
Solange Du genug freie Pins hast, kannst Du solchen Problemen natürlich
ausweichen. Sinnvoller wäre es aber, das Problem durch Setzen der
Config-Bits im entsprechenden Register zu lösen, da JTAG ja
offensichtlich nicht gebraucht wird. Z.B. auf "JTAG-DP Disabled and
SW-DP Enabled", siehe Anhang. Wie das in der "stm32f10x.h Umgebung"
geht, kann ich Dir allerdings nicht sagen.
> Komisch. Kann das eventuell davon kommen, dass ich die Boards testweise> mal über den Bootloader gebrannt habe? Absichtlich habe ich nichts> umgestellt.
Nein.
Leo C. schrieb:> Solange Du genug freie Pins hast, kannst Du solchen Problemen natürlich> ausweichen.
Das habe ich vor, aber erst mal eins nach dem anderen. Meine
Display-Ansteuerung läuft jetzt. Nun kann ich mich mit diesem Thema
befassen.
Steph M. schrieb:> Mir ist dann gleich noch aufgefallen, dass auch DB3 vor belegt ist und> ich dadurch immer ein par Grafikbuggs hatte. Nachdem ich die beiden Pins> auf PA6 und PA8 umgezogen habe scheint jetzt einwandfrei zu> funktionieren.
Man kann PB3, PB4 usw. aber auch wieder reaktivieren, wenn man JTAG
nicht benötigt.
Deshalb steht bei mir in jedem STM32-Projekt ziemlich am Anfang der
main-Funktion:
1
#if defined (STM32F103) // disable JTAG to get back PB3, PB4, PA13, PA14, PA15
2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);// turn on clock for the alternate function register
3
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);// disable the JTAG, enable the SWJ interface
4
#endif
Und schon hat man 5 Pins mehr zur Verfügung, die davon betroffen sind.