stm32f103C8T6 Blue Pill Bug?

OP #4996826
Lesenswert?

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:
1
#include "stm32f10x.h"
2

3
int main(void) {
4
  SystemInit();
5
  GPIO_InitTypeDef GPIO_InitStructure;
6

7
  // Clock Enable PortB, PortA
8
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
9

10
  // Pins von PortB initialisieren
11
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
12
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
13
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
14
  GPIO_Init(GPIOB, &GPIO_InitStructure);
15

16
  GPIO_ResetBits(GPIOB, GPIO_Pin_4);
17
  while (1) {
18
  }
19
}
OP #4997559
Lesenswert?

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.
#4997607
Lesenswert?

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.
Angehängte Dateien:
Moderator Persönliche Seite #4997621
Lesenswert?

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.

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