Forum: Mikrocontroller und Digitale Elektronik STM32F4 Disco, Frage zu Reset


von timertick_t (Gast)


Lesenswert?

Vorab: ich bin noch ziemlich unerfahren mit diesen 32F4 Biestern.
Ich spiel gerade mit dem 32F407 Disco Board rum und stelle fest, daß er 
nicht immer losläuft und einen ext. Reset erfordert.
Das hier könnte die Ursache (oder ein Teil davon?) sein:
1
HAL_GPIO_Init(BLINK_GPIOx(BLINK_PORT_NUMBER), &GPIO_InitStructure);

Nach einem einmaligen Reset scheint's dann wieder zu gehen bis der 
nächste Port konphiguriert wird.
Geht das nicht auch zuverlässig ohne externen Reset ( -> via stlinkv2)?

von Sören K. (foxalem)


Lesenswert?

Moin,

ich hab keine Ahnng was das Teil ist, aber ich gehe einfach mal von 
einem uC evaluation-board aus.

Hast du deine Flags richtig gesetzt?
Schonmal im Datenblatt nachgeguckt? 
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00037368.pdf
Evtl WatchDog nicht ausgestellt/gefüttert?

Bzw. Einmal code wäre gut und eine Erklärung was du überhaupt machen 
willst. Welches Programm nutzt du? (keil?)

von timertick_t (Gast)


Lesenswert?

Ich dachte eigentlich, daß ich das 17EUR Disco very Board unter denen 
sich hier in diesem Kreise aufhaltenden üblichen Verdächtigen nicht 
weiter erwähnen muß, zumal ich ja auch '32F407 Disco Board' geschrieben 
habe.
Hier nen Bild:
http://www.st.com/st-web-ui/static/active/en/fragment/product_related/rpn_information/board_photo/stm32f4_discovery.jpg

Hab hier Eclypse mit Cross-Compiler. Ich hab einfach nur mal mit den 
Ports des 407 gespielt. Mit im ARM Plug-in für Eclipse ist ein 
blink-a-led example (mit >8kB Start-up Code!). Aber an dem hab ich 
nichts gefummelt (solange ich noch keine Ahnung hab) und keine Flags 
geändert. Lediglich eine Port-Initialisierung für nen weiteren Port + 
Port 'hoch- und wieder runterschalten' hab ich durchgeführt.
1
#define BLINK_PIN_NUMBER5               (11) // Port PD11
2
3
  // Configure pin in output push/pull mode
4
  GPIO_InitStructure.Pin = BLINK_PIN_MASK(BLINK_PIN_NUMBER5);
5
  GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
6
  GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
7
  GPIO_InitStructure.Pull = GPIO_PULLUP;
8
  HAL_GPIO_Init(BLINK_GPIOx(BLINK_PORT_NUMBER), &GPIO_InitStructure);
Gerade eben mit dem neu dazu geschalteten zusätzlichen Portpin 
BLINK_PIN_NUMBER5 ist er wieder hängen geblieben.

von Sören K. (foxalem)


Lesenswert?

Moin,

ist dass der ganze Code?
Wo werden deine Funktionen beschrieben? Ich hab doch jetzt anhand von 
dem Code keine Ahnung was da passiert.
Was macht "BLINK_PIN_MASK()"?

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00037368.pdf
> Getting started
> Follow the sequence below to configure the STM32F4DISCOVERY board and launch the
> DISCOVER application:
> 1.     Check jumper position on the board, JP1 on, CN3 on (DISCOVERY selected).
> 2.     Connect the STM32F4DISCOVERY board to a PC with a USB cable ‘type
> to mini-B’ through USB connector CN1 to power the board. Red LED LD2 (PWR)
> then lights up.
> 3.     Four LEDs between B1 and B2 buttons are blinking.
> 4.     Press user button B1 to enable the ST MEMS sensor, move the board
> and observe the four LEDs blinking according to the motion direction and
> speed. (If you connect a second USB cable ‘type A to micro-B’ between PC
> and CN5 connector then the board is recognized as standard mouse and its
> motion will also control the PC cursor)

Sowas schonmal angeguckt?
Ein bisschen mehr Infos darüber was du gemacht hast, wie das Teil 
angeschlossen ist etc pp. wären Hilfreich.
Ich kenne das Ding nicht, aber es ist auch nix anderes als ein uC der 
halt viel kann und hübsch auf einem Board verbaut ist damit man schön 
spielen kann. Ggf. mal das Datenblatt von dem uC selber welcher da 
verbaut ist durchforsten nach "Reset" oder "Watchdog".
Wie z.b. der PoR / PdR (Power on Reset / Power down Reset) auf dem Board 
bedient ist weiß ich nun auch nicht, müsste man aber mal in Erfahrung 
bringen denke ich.

von Bernd K. (prof7bit)


Lesenswert?

timertick_t schrieb:
> Gerade eben mit dem neu dazu geschalteten zusätzlichen Portpin
> BLINK_PIN_NUMBER5 ist er wieder hängen geblieben.

Ist dieses Struct ordentlich initialisiert = {0}; bevor Du es 
verwendest?

BTW: Ich würde übrigens auf dieses ganze HAL-Gedöns verzichten und 
stattdessen die Register direkt ansprechen (oder Dir selbst ne dünne 
Abstraktion bauen die das macht und die nicht so verkrampft 
pseudo-universell sein will wie dieses unsägliche HAL-Monster sondern 
schön simpel und pragmatisch).

Entgegen landläufigem Irrglauben muss man dazu nämlich nicht etwa mehr 
oder kompliziertere Dokumentation lesen sondern ganz im Gegenteil, man 
kommt mit der Hälfte an Dokumentation aus und kommt dadurch wesentlich 
schneller voran! Das Reference-Manual ist gut lesbar und verständlich.

Tipp: Besorg Dir von irgendwoher ein minimales Blinky-Beispiel ohne HAL 
und ohne Peripheral-Lib und nimm das als Ausgangspunkt.

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.