Forum: Mikrocontroller und Digitale Elektronik STM32F4 auf eigenem Board / GPIO Ansteuerung


von Christian N. (phoenichts)


Angehängte Dateien:

Lesenswert?

Guten Tag zusammen,

ich komme aus der Welt der Atmega-Controller und versuche mich nun in 
ersten Schritten auf einem ARM STM32F405. Aus Spaß an der Hardware habe 
ich für erste Schritte keines der bekannten Experimentierboards 
verwendet sondern habe mir ein eigenes kleines Board mit einem Adapter 
auf einer Lochrasterplatine aufgebaut. Dies war auch auf Anhieb 
erfolgreich: Mit CoIDE und einer Quick&Dirty-Anleitung konnte ich einen 
der GPIOs zum Toggeln bringen. Daher gehe ich momentan davon aus, dass 
die MCU richtig beschaltet ist.

Im nächsten Schritt kämpfe ich nun damit, mittels STM32CubeMX nur die 
aktuell benötigten Treiber zu verwenden – und genau hier setzt meine 
Frage an bzw. komme ich seit gut einer Woche nicht weiter:

Ich habe mir von CubeMX den Initialisierungscode für die Verwendung der 
Komponenten DAC und ADC erzeugen lassen. TIM4 ist auf die interne Clock 
eingestellt (ein externer Taktgeber ist momentan nicht angeschlossen). 
Im ersten Schritt möchte ich wieder einen GPIO-Port toggeln lassen(PC13) 
und habe dafür mittels System Workbench for STM32 einen GPIO-Port 
innerhalb von MX_GPIO_Init (von CubeMX erzeugt) wie folgt konfiguriert:
1
/* USER CODE BEGIN 4 */
2
__HAL_RCC_GPIOC_CLK_ENABLE();
3
4
GPIO_InitTypeDef  GPIO_InitStructure;
5
6
GPIO_InitStructure.Pin = GPIO_PIN_13;
7
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
8
GPIO_InitStructure.Pull =  GPIO_PULLUP;
9
GPIO_InitStructure.Speed =  GPIO_SPEED_HIGH;
10
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
11
/* USER CODE END 4 */

Im Hauptprogramm  rufe ich die Funktion zum toggeln wie folgt auf:
1
/* USER CODE BEGIN 2 */
2
HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
3
/* USER CODE END 2 */

Unerfreulicher Weise ist dem Aufbau außer einem Wechsel des Ports PC13 
von low auf high keine Reaktion zu entlocken – und das unabhängig ob ich 
bei der GPIO-Konfiguration einen PullUp oder PullDown konfiguriere (das 
Kompilieren ist erfolgreich). Da ist also irgendwo der Wurm drin.

Da nicht nur der ARM-Prozessor als solches für mich Neuland ist sondern 
auch die Entwicklungsumgebung die auf Eclipse basiert, erhoffe ich mir 
auf diesem Wege ein wenig Hilfestellung zu bekommen, in welche Richtung 
ich meine Fehlersuche lenken sollte. Ich selber habe momentan keinen 
Ansatz mehr und sitze etwas ratlos vor meiner Platine…

Schaltplan und main.c habe ich angehangen. Wenn weitere Dateien benötigt 
werden stelle ich diese auch gerne zeitnah bereit.

Im Voraus schon herzlichen Dank für etwaige Rückmeldungen und die damit 
verbundene Mühe: Christian

: Bearbeitet durch User
von schreiber (Gast)


Lesenswert?

Ich muss gestehen, dass ich jetzt nicht aus der Welt der ARMs komme, 
aber was mir auffällt: Du hast ja auch nirgends eine Interrupt Routine? 
Oder sehe ich die nicht?

Du Togglest den Ausgang ja nur einmal vor der while-Schleife. Also wird 
wahrscheinlich alles erst einmal Initialisiert, dann der Ausgang ein mal 
getogglet und dann wartet der ARM in seiner While-Schleife.

Gruß schreiber

von Christian N. (phoenichts)


Lesenswert?

Hallo Schreiber,

Bingo - der Aufruf stand an der falschen Stelle! Wie blöd.

Vielen Dank & ein schönes Wochenende: Christian

von nichtGast (Gast)


Lesenswert?

Hi,
was funktioniert genau jetzt nicht, leuchtet die LED nicht obwohl PIN 
PC13 auf HIGH geht, oder geht es dir um die anderen funkktionen wie den 
Timer und ADC bzw. DAC ?

Du könntest dir von STM das CubeFW Package sowie das Manual zur HAL API 
heunterladen und dir die Beispielcodes anschauen.
MFG

von Christian N. (phoenichts)


Lesenswert?

Hallo nichtGast,

letztendlich geht es mir in der aktuellen Konfiguration darum, DAC und 
ADC zu benutzen. Im ersten Schritt um mich mit der neuen 
Entwicklungsumgebung bekannt zu machen soll aber erstmal nur der Ausgang 
PC13 toggeln (funktioniert jetzt).

Das Manual zum HAL-Treiber habe ich mir natürlich angesehen und auch 
darauf basierend die Konfiguration erstellt.

Viele Grüße,
Christian

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


Lesenswert?

VSSA solltes Du nicht offen lassen!

von Dr. Sommer (Gast)


Lesenswert?

Aus dem Datasheet:

PC13, PC14, PC15 and PI8 are supplied through the power switch. Since 
the switch only sinks a limited amount of current
(3 mA), the use of GPIOs PC13 to PC15 and PI8 in output mode is limited:
- The speed should not exceed 2 MHz with a maximum load of 30 pF.
- These I/Os must not be used as a current source (e.g. to drive an 
LED).

von Christian N. (phoenichts)


Lesenswert?

Hallo

@Uwe:
Danke, korrigiere ich!

@Dr:Sommer:
Ich bin mir nicht sicher, ob ich die Aussage richtig interpretiere: Ich 
versuche keine nennenswerten Lasten zu treiben. An dem Pin hängt nur ein 
Oszilloskop. Mir geht es - wie gesagt - erstmal nur um erste Schritte 
mit der für mich neuen ToolChain.

Gruß,
Christian

von Vincent H. (vinci)


Lesenswert?

1
  /* USER CODE BEGIN 2 */
2
  HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
3
  /* USER CODE END 2 */
4
5
  /* Infinite loop */
6
  /* USER CODE BEGIN WHILE */
7
  while (1)
8
  {
9
  /* USER CODE END WHILE */
10
11
  /* USER CODE BEGIN 3 */
12
13
  }
14
  /* USER CODE END 3 */


Dein Code macht eh genau das was du programmiert hast?
Es wird PC13 getoggelt (ich nehm mal an von low auf high) und dann 
"nop"-ed dein F405 fröhlich vor sich hin.

Was genau hast du von dem Programm erwartet?
Du initialisiert zwar einen Timer, den ADC und DAC, startest aber gar 
nichts davon und tust auch sonst nichts außer "while(1)".

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.