Forum: Mikrocontroller und Digitale Elektronik STM32F103C8T6: PortB Probleme


von Markus S. (acepilot)


Lesenswert?

Guten Morgen zusammen,

Gestern habe ich versucht ein neues Projekt zu starten und habe auf 
meine betsellte Platine eine F103 MCU verlötet. Programmieren ist kein 
Problem, aber beim testen von den Ausgängen am PortB bin ich fast 
verzweifelt. PB3 und PB4 funktionieren einfach nicht.

Direkt nach dem die MCU initialisert wurde hat das IDR Register des 
Ports bereits das Bit 4 gesetzt. Selbst ein Initialiseren des gesamten 
Ports als Input mit PullDown's ändert daran nichts.

Setzte ich in nächsten Schritt die Pins PB3, PB4 und PB5 als Push Pull 
Ausgang und steuer sie durch wird im IDR Register Bit4 und Bit5 als High 
Bit3 als Low angezeigt. Die LED's an PB3 und PB4 leuchten aber nicht. 
Beim zurücknehmen der Ausgänge ist wieder nur das Bit 4 im IDR Register 
gesetzt.

Um einen Controllerdefekt auszuschließen habe ich das selbe Programm 
schnell auf ein kleines blaues Chinaboard geflasht. Dort habe ich exakt 
das selbe Verhalten. Um zu testen das die Ausgänge wirklich nicht 
durchschalten habe ich dann zusätzlich Brücken von PB3 auf PB6, PB4 auf 
PB7 und PB5 auf PB8 gesteckt. Dit Bits von von diesen Pin's sind im IDR 
Register danach 100% analog zu den drei anderen Bits.

Eine erste Suche im Errata Sheet war noch erfolglos, kennt jemand von 
Euch dieses Problem oder kann mir den richtigen Tip geben um dem Problem 
auf die Schliche zu kommen?

Getestet habe ich mit folgendem Code:
1
#include "stm32f10x.h"
2
#include "stm32f10x_gpio.h"
3
#include "stm32f10x_rcc.h"
4
5
volatile uint8_t state;
6
7
int main(void)
8
{
9
  GPIO_InitTypeDef GPIO_InitStructure;
10
11
  SysTick_Config(72000);
12
13
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
14
15
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
16
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPD;
17
  GPIO_InitStructure.GPIO_Pin   = (GPIO_Pin_All);
18
  GPIO_Init(GPIOB, &GPIO_InitStructure);
19
20
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
21
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
22
  GPIO_InitStructure.GPIO_Pin   = (GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);
23
  GPIO_Init(GPIOB, &GPIO_InitStructure);
24
25
  state = state | 0x2;
26
27
    while(1)
28
    {
29
30
      if ((state & 0x1) == 0x1)
31
      {
32
        state = state ^ 0x1;
33
        if ((state & 0x2) == 0x2)
34
        {
35
          GPIO_SetBits(GPIOB,(GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5));
36
        }
37
        else
38
        {
39
40
          GPIO_ResetBits(GPIOB,(GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5));
41
        }
42
        state = state ^ 0x2;
43
      }
44
    }
45
}
46
47
48
void SysTick_Handler(void)
49
{
50
  static uint16_t second_count = 0;
51
52
  second_count++;
53
54
  if (second_count >= 1000)
55
  {
56
    second_count = 0;
57
    state = state | 0x01;
58
  }
59
}

Gruß,
Markus

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich probier das immer so:
https://www.google.de/search?q=stm32f103+pb3+pb4
Und finde dann z.B. sowas:
http://www.stm32duino.com/viewtopic.php?t=1130#p13918
Ist das bei dir evtl. auch der Fall?

: Bearbeitet durch Moderator
von Markus S. (acepilot)


Lesenswert?

Aargh, ich weiß nicht nach was ich alles gegoogelt habe und warum ich da 
nicht drauf gekommen bin. Vielen dank für den Wink mit dem Zaunpfahl.

von W.S. (Gast)


Lesenswert?

Markus S. schrieb:
> Aargh, ich weiß nicht nach was ich alles gegoogelt habe

Ein Blick in das Datenblatt auf die Default-Pinbelegungen nach Reset 
hätte es dir gezeigt.

Warum nur scheuen sich hier so viele Leute vor dem Lesen der 
Dokumentationen?

W.S.

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


Lesenswert?

Weil sie meinen, das HAL Ihnen das abnimmt...

von W.S. (Gast)


Lesenswert?

Hmm.. tja.

Irgendwie habe ich den Eindruck, daß gerade die nachwachsenden 
Möchtegern-Mikrocontroller-Spezialisten einer fatalen 
Schlaraffenland-Mentalität nachhängen.

Sie glauben, sowas wie Kunden zu sein, deswegen sehen sie es als ihr 
verbrieftes Recht an, nix verstehen und nix selber können zu müssen und 
dennoch mit selbstfliegenden gebratenen Tauben versorgt zu werden - 
kostenlos selbstverständlich.

W.S.

von Markus S. (acepilot)


Lesenswert?

Ich habe länger überlegt, ob ich zu euren Ausführungen Stellung beziehe, 
oder ob ich es einfach darauf beruhen lasse. Es wird ja an genug Stellen 
immer wieder darauf hingewiesen, dass es hier im Forum Normalität ist 
mal schärfer angegangen zu werden. In gewissen Zügen kann ich das sogar 
verstehen dass es oft nervt oder lästig ist eine Frage zu lesen oder zu 
beantworten die für einen selber klar auf der Hand liegt und dadurch 
auch schnell in den Dokumentationen gefunden werden kann. Da fragt man 
sich schnell, warum das andere anscheinend nicht hinbekommen.

Jetzt kommt das aber. Ich denke es gibt hier viele Leute, die die ganze 
Thematik als Hobby betreiben und es damit nicht hauptberuflich machen. 
Von daher fehlen an der ein oder anderen Stelle einfach die Erfahrung 
und vielleicht auch eine strukturiertere Vorgehensweise. Die Möglichkeit 
dann hier im Forum nach einer Lösung oder einem Tipp zu fragen verleitet 
dazu es dann eben schneller zu tun bevor man das 10 mal über die 
Dokumentation schaut und einen weiteren Tag mit der Fehlersuche 
verbringt, weil man sich verannt hat.

Ich bin auf jeden Fall froh, dass es hier eine Anlaufstelle gibt, bei 
der man in der Regel eine Antwort auf seine Frage bekommt, sofern 
erkennbar ist, dass man sich mit dem Problem schon irgendwie auseinander 
gesetzt hat.

Mir liegt es fern, und das geht hier bestimmt noch vielen anderen, hier 
als Kunde gesehen zu werden um Lösungen auf dem Silbertablett 
einzuforden oder geliefert zu bekommen. Es sollte doch vielmehr der Weg 
beschritten werden mit Tips und Hinweisen die Fragenden in die richtige 
Richtung zu schicken. Und für die ganzen alten Hasen kann es ja auch 
eine Bestätigung sein, Anfängern und Neulingen mit Tips den richtigen 
Weg bei der Arbeit mit den Mikrocontrollern zu zeigen.

Ich kann mich nur nochmal bei Euch bedanken, für die wieder mal schnelle 
Hilfe sowie den Hinweis über die Default Pin Belegungen. Nur durch 
solche Aktionen können auch wir Hobbisten lernen und Erfahrungen sammeln 
um in Zukunft besser an solche Probleme zu gehen und die Lösung dann 
vielleicht selber zu finden.

Wünsche allen ein schönes Wochenende ...

PS: Für alle die auch auf das selbe Problem auflaufen hier einmal die 
Lösung unter Nutzung der StdPeriphlib für das deaktivieren des JTAG 
Ports.
1
  /* Remap JTAG Default Pins */
2
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
3
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Markus S. schrieb:
> PS: Für alle die auch auf das selbe Problem auflaufen hier einmal die
> Lösung unter Nutzung der StdPeriphlib

Ich bin gerade dabei, mich über dich zu ärgern.

Du hast mit dieser unsäglichen Obfuskations-Lib angefangen, hast dabei 
eine Bauchlandung hingelegt, wurdest von Leuten, die es wirklich BESSER 
wissen und können, eines Besseren belehrt - UND? ..und du hast 
ersichtlichermaßen rein garnichts dazugelernt.

Es ist überhaupt nicht die Frage relevant, ob man nun Amateur ist oder 
seine Brötchen damit verdienen muß. Es ist das Stück intellektuelle 
Stufe, auf die man sich stellt. Wer einen Mikrocontroller anzuwenden 
trachtet, ist kein Kunde, der sich ein neues Smartphone nebst Vertrag 
zulegt, sondern man ist Teil eines Herstellungsprozesses und ist deshalb 
gehalten, wenigstens ein wenig systematisch vorzugehen und über die 
Sache, die man bearbeitet, Bescheid zu wissen.

Markus S. schrieb:
> Gestern habe ich versucht ein neues Projekt zu starten und habe auf
> meine betsellte Platine eine F103 MCU verlötet.

Ah ja! Und du hast dir offenbar zuvörderst keinerlei Gedanken gemacht, 
wofür denn nun welches Pin gut ist, was dessen Funktion ist, was das 
Manual dazu sagt.

Aber genau DAS wäre das, was man als ernsthafter Amateur oder ebenso 
ernsthafter Profi zu allererst tut. Man kann doch nicht sich sagen "ich 
weiß zwar noch nix, aber anstatt mich zu belesen, fange ich erstmal mit 
Löten an" - ohne daß man sich hier in diesem Forum als ein 
NichtDenkenWollender darstellt. Und dafür die entsprechende Kritik 
bekommt.

W.S.

von Christian (Gast)


Lesenswert?

W.S. genau wegen Dir hat der TO sein letztes Posting verfasst.

W.S. schrieb:
> Du hast mit dieser unsäglichen Obfuskations-Lib angefangen, hast dabei
Falsch. Der Hersteller hat damit angefangen. Und wenn der Hersteller 
nicht suggeriert hätte, mit dieser Lib ist alles ein Kinderspiel, hätte 
auch keiner den Chip gekauft.
Das die Sache eben doch komplexer ist, sieht man erst, wenn man sich 
durch die auf viele Teile verteilen Dokumentation (>2000 Seiten) kämpft.


> wissen und können, eines Besseren belehrt - UND? ..und du hast
> ersichtlichermaßen rein garnichts dazugelernt.
Nein. Deine Programmierweise mag für Dich besser sein. Was Du aber noch 
nicht begriffen hast, das es andere Wege gibt, die auch gültig sind.


W.S. schrieb:
> Irgendwie habe ich den Eindruck, daß gerade die nachwachsenden
> Möchtegern-Mikrocontroller-Spezialisten einer fatalen
> Schlaraffenland-Mentalität nachhängen.
Das mag ja richtig sein, aber dann such Dir doch ein anderes Hobby, als 
hier im Forum zu posten...
Und stell Dich schonmal drauf ein: Es wird schlimmer werden!

Christian

von Mirplatztdiehutschnur (Gast)


Lesenswert?

Was soll das eigentlich hier ständig so auf Anfängerfehler zu reagieren. 
Alle die hier die Fresse so gewaltig voll nehmen und auf solche Fragen 
extrem reagieren sind offenbar als die Codinggurus auf diese Welt 
gekommen. Die Herren haben wahrscheinlich ihr eigenes OS für ihre PCs 
direkt binär von Hand in ihren selbstgeschnitzten PC gehackt. Werkzeuge 
von anderen darf man gemäß ihren Ausführungen ja nicht verwenden.

Eigentlich sollten die ganzen Genies lieber froh sein das es andere gibt 
die (mich nicht schlagen) über den Arduionolevel hinaus wollen. Und 
selbst wenn jemand die HAL von ST verwenden will, und dafür eventuell 
Gründe hat, ist es kein prinzipieller Fehler für den man jemand auf den 
Scheiterhaufen stellen muß. Die vorher erwähnten Genies schreiben sich 
wahrscheinlich auch generell eigene Treiber für PC-Hardware wenn ein 
Fehler in dem vom Hersteller gelieferten  drin ist.

von Errata Sheet (Gast)


Lesenswert?

Hallo Junx,

das Beste, was Ihr mit den Betty-Taliban W.S. anfangen könnt, ist ihn zu 
ignorieren.

Er hat die Weisheit nicht nur mit Löffeln, sondern mit der 
Baggerschaufel gefressen.

von aSma>> (Gast)


Lesenswert?

Irgendwie hat W.S. schon recht! Die Leute fangen an zu programmieren und 
Strippen zu ziehen OHNE nur einen kleinen Blick in die Datasheet zu 
werfen. Armseelig.

Ein STM32F103C8T6 ist zwar nicht so teuer aber wenn dieser ständig 
kaputt geht, spätestens dann muss man eh ins Datenblatt reinschauen... 
Nein, sry. Man kann ja hier nachfragen. Irgend ein Dummer gibt die 
Antwort schon und man lernt nie selbstständig zu arbeiten.

Ab S. 28 ff. gibt es die Pin Definitionen auf einen Blick.

http://www.st.com/content/ccc/resource/technical/document/datasheet/33/d4/6f/1d/df/0b/4c/6d/CD00161566.pdf/files/CD00161566.pdf/jcr:content/translations/en.CD00161566.pdf

von noreply@noreply.com (Gast)


Lesenswert?

Mirplatztdiehutschnur schrieb:
> Die Herren haben wahrscheinlich ihr eigenes OS für ihre PCs
> direkt binär von Hand in ihren selbstgeschnitzten PC gehackt.

Ja. Damals gab es noch nichts.

von grundschüler (Gast)


Lesenswert?

aSma>> schrieb:
> Irgend ein Dummer gibt die
> Antwort schon und man lernt nie selbstständig zu arbeiten.

Vom Antworten wird man ja zumindest nicht dümmer. Wer selbständig 
arbeiten will, quält sich halt durch die Dokus. Wem copy & paste reicht, 
klickt sich halt seinen Arduino-code zusammen. Auch das kann ein 
anspruchsvolles Hobby sein.

von W.S. (Gast)


Lesenswert?

Christian schrieb:
> W.S. genau wegen Dir hat der TO sein letztes Posting verfasst.

Nun, diesen Eindruck hatte ich auch.

Aber lies seinen letzten Beitrag nochmal gründlich, da tut sich eben 
genau die von mir kritisierte Mentalität auf.

Christian schrieb:
> Nein. Deine Programmierweise mag für Dich besser sein. Was Du aber noch
> nicht begriffen hast, das es andere Wege gibt, die auch gültig sind.

Es gibt da einen feinen Unterschied: Ich komme mit meiner Weise aus 
eigener Kraft zu Potte - der TO und eine Menge andere hier kommen auf 
ihre Weise hingegen nicht zu Potte.

Und eben diese alle fragen deshalb hier nach der Schnellhilfe, ohne ihr 
bisheriges Treiben auch nur im Geringsten mal selbst - so ganz für sich 
-  auf den persönlichen Prüfstand zu stellen. Anspruchsdenken: "Man 
helfe mir - PRONTO!"

Also: Wenn jemand mit Cube, ST-Lib, Arduino und sonstwas zurecht kommt 
und damit seine Ziele erreicht, dann ist das OK und kein Hahn kräht 
danach.

Wenn aber jemand wirklich NICHT zurechtkommt, dann sieht das anders aus. 
Ganz offensichtlich ist die Programmierweise des TO eben doch nicht ein 
"gültiger Weg". Ich zitiere noch mal:

Markus S. schrieb:
> habe auf
> meine betsellte Platine eine F103 MCU verlötet. Programmieren ist kein
> Problem,

Offensichtlich ist das Programmieren eben doch ein Problem für ihn.

Aber anstatt eine gewisse Einsichtigkeit zu haben, reagiert der TO 
beleidigt. Das ist unangemessen und zeigt, daß er die Lehre noch immer 
nicht angenommen hat. OK, er braucht das auch nicht, schließlich sind es 
seine Projekte und nicht meine oder deine. Schlimm wird es nur, wenn 
sowas in ein paar Jahren ins ABS meines oder deines Autos gelangt. Sowas 
ist das Szenario, was mir wirklich Sorgen macht - und deswegen gibt's 
auch in Zukunft von mir hier ne harsche Kritik, wo vonnöten. Ich geb die 
Hoffnung nicht auf, daß es irgendwo doch was hilft.

Christian schrieb:
> Und stell Dich schonmal drauf ein: Es wird schlimmer werden!

Hmm... auch dieser Gedanke stimmt einen nicht froh.

W.S.

von Markus S. (acepilot)


Lesenswert?

W.S. schrieb:
> Aber lies seinen letzten Beitrag nochmal gründlich, da tut sich eben
> genau die von mir kritisierte Mentalität auf.

Mir ist nicht ganz klar, an welchen Stellen meines Posts du glaubst 
festmachen zu können, dass ich mich ganz deiner niedergeschriebenen 
Mentalität verhalte. Aber das ist hier ja ebenfalls an der Tagesordnung, 
dass viel zwischen den Zeilen gelesen, vieles über einen Kamm geschoren 
wird um dann seine Meinung über andere Leute kund zu tun. Erstaunlich 
wie man sich an  einer kleinen Anzahl an Beiträgen anmaßt vollumfänglich 
über Personen urteilen zu können.

W.S. schrieb:
> Und eben diese alle fragen deshalb hier nach der Schnellhilfe, ohne ihr
> bisheriges Treiben auch nur im Geringsten mal selbst - so ganz für sich
> -  auf den persönlichen Prüfstand zu stellen. Anspruchsdenken: "Man
> helfe mir - PRONTO!"

In keiner einzigen Zeile steht geschrieben das eine unverzügliche Lösung 
auf dem Silbertablet erwartet wird bzw. wurde. Und ob du es glaubst oder 
nicht, sicherlich hinterfragt man durchaus sein eigenes Vorgehen, wenn 
man eine so offensichtliche Information so oft überlesen und damit nicht 
selber gefunden hat.

W.S. schrieb:
> Ah ja! Und du hast dir offenbar zuvörderst keinerlei Gedanken gemacht,
> wofür denn nun welches Pin gut ist, was dessen Funktion ist, was das
> Manual dazu sagt.

Sicherlich habe ich mir gedanken darüber gemacht, welche Funktion, 
welcher Pin vom Controller für was verwendet wird. Beim erstellen des 
Layouts, wurden dann der ein oder ander Pin nochmals verschoben, um ein 
einfacheres Routing zu ermöglichen. Wenn du mit deinem Post sagen 
möchtest, ich habe nicht jegliche mögliche Funktion im Datenblatt eines 
jeden Pin's durchgeschaut, dann bin ich in iesem Punkt tschuldig. Um 
einen Überblick über die verwendeten Pins in meinen Projekt zu bekommen, 
habe ich von ST die CubeMX Software genommen, da man dort 
Augenscheinlich einen guten Überblick hat und im Kontextmenü eines Pins 
dessen Funktionen sieht. Genau dabei ist mir der Fehler unterlaufen 
nicht die Default Pin Belegung zu checken und damit in das oben 
beschriebene Problem zu laufen. Sowas sind nunmal mögliche 
Anfängerfehler. Für die Zukunft lernt man daraus noch genauer 
hinzuschauen um diesen Problemen aus dem Weg zu gehen.

W.S. schrieb:
> Offensichtlich ist das Programmieren eben doch ein Problem für ihn.
>
> Aber anstatt eine gewisse Einsichtigkeit zu haben, reagiert der TO
> beleidigt. Das ist unangemessen und zeigt, daß er die Lehre noch immer
> nicht angenommen hat.

Auch bei dieser Ausführung stelle ich mir die Frage, woher du dein, aus 
meiner Sicht sehr voreiligen, Schlüsse ziehst. Vielleicht habe ich auch 
direkt im ersten Satz eine falsche Formulierung gewählt. Gemeint hatte 
ich eigentlich das Flashen und debuggen des Controllers über die SWD 
Schnittstelle ist kein Problem.
Aber um noch genauer darauf einzusteigen, auch die sontiges 
Programmierung ist kein Problem, wenn du es als Problem siehst weil man 
eine Information überlesen hast, ok ist deine Meinung.
Und beleidigt bin ich überhaupt nicht, sorry wenn das so bei dir 
angekommen ist. Ich habe nur versucht gewisse Dinge klar zu stellen und 
meine Meinung dazu gepostet. Wie schonmal gesagt, bin ich ja froh das es 
hier Leute gibt die anderen helfen wollen. Wenn es dann noch einer 
gewissen didaktik folgt das man noch selber was dabei lernt um so 
besser.

Im großen und ganzen scheint hier bei einigen die Verbitterung darüber, 
dass Anfänger mal Fehler machen und dann noch in einem Forum nachfragen, 
sehr groß zu sein. Regelmäßig werden diese Anfänger dann sehr harsch 
angegangen, eine Diskussion über sie geführt in der sie dann förmlich 
zerissen werden. In den sehr vielen Fällen führt das dann dazu, dass 
sich diese Leute garnicht mehr zu Wort melden und das, meine Meinung 
nach, viele Beiträge nur noch als Gast verfasst werden. Dies ist der 
Qualität der Beiträge sehr oft auch nicht gerade zuträglich. Das stellt 
sich einem doch die Frage, warum dann überhaupt auf Beiträge geantwortet 
wird. Anscheinend um sich selbst und seine Fähigkeiten zu feiern und 
einfach ein wenig Stimmung zu verbreiten...

Um das ganze an dieser Stelle abzuschließen, ich bin oder war weder 
beleidigt noch bin ich nicht gewillt dazu zu lernen und bei den nächsten 
Problemen hoffentlich selber auf die Lösung zu kommen. Trotzdem danke 
für die Hilfe und ebenfalls Harsche Kritik :-)

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.