Forum: Mikrocontroller und Digitale Elektronik STM32F405 DFU


von Kristian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe eine "altes" Flightcontrol-Board eines Quadcopters, dass ich 
gerne zweckentfremden will.
Es besitzt einen STM32F405 incl. USB Buchse.

Ich habe per DfuSe-Kit erst per "DFU File Manager" aus der generierten 
.hex eine .dfu gebaut und diese dann mit "DfuSe Demo" geflasht.

Leider passiert auf dem Board nichts (es sollte nur eine LED blinken).

Das Board ist ein OpenPilot Revolution 
(http://opwiki.readthedocs.io/en/latest/user_manual/revo/revo.html#diy-board) 
ganz unten sind auch die Schematics per Download.

Unter anderen sind da die beiden LEDs zu erkennen an den Ports "PB4" und 
"PB5".

Jedoch passiert bei meinem Beispiel-Code nichts....
1
void LED_Init(void)
2
{
3
  GPIO_InitTypeDef GPIO_InitStructure;
4
  /* GPIOD Periph clock enable */
5
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
6
  /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
7
  GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4 | GPIO_Pin_5);
8
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
9
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
10
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
11
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
12
  GPIO_Init(GPIOB, &GPIO_InitStructure);
13
}
14
15
/*---------------------------- Main function -------------------------------*/
16
17
int main(void)
18
{
19
  LED_Init();
20
  int index;
21
22
  while (1)
23
  {
24
      GPIO_ResetBits(GPIOB, GPIO_Pin_5);
25
26
      for (index = 0; index < 500000; index++);
27
28
      GPIO_SetBits(GPIOB, GPIO_Pin_5);
29
30
      for (index = 0; index < 500000; index++);
31
  }
32
}

Stimmt der Code und der Vorgang?

von pegel (Gast)


Lesenswert?

Als erstes würde ich mir einen ST-Link Adapter besorgen.
SWD an CONN6 ist heraus geführt.

Dann kommt es darauf an wie du entwickeln möchtest.

Ich bevorzuge CubeMX und SW4STM32. Nur als Tipp, andere sehen das anders 
;)

von Kristian (Gast)


Lesenswert?

Ja darüber hab ich auch schon nachgedacht. Aber eigentlich ist doch der 
DFU Modus da um zu flashen, und mein Projekt ist auch nicht besonders 
umfangreich, daher würde ich gern das nutzen was schon vor mir liegt.

von pegel (Gast)


Lesenswert?

Kannst du machen, merkst aber nicht wenn etwas nicht stimmt.
Z.B.: wenn er direkt im Error landet.

So ist es an dir ein funktionsfähiges Programm zu erstellen.

Ich könnte anbieten eine Blinky hex zum Test zu erstellen.

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe dir eine hex angehängt.
Damit kannst du die Wanndlung und Programmierung prüfen.

von Kristian (Gast)


Lesenswert?

Das wäre super, danke!
Dann weiß ich ob mein Fehler in der Toolchain liegt oder im Code.

Ja, ich arbeite sonst auch mit Debuggern, der Vorteil ist da nicht zu 
bestreiten. Nur habe ich gerade keinen für die STM32er hier.

von Kristian (Gast)


Lesenswert?

Wow, es geht. Es blinkt abwechseld rot/blau :)

Vielen, vielen dank!

Dann liegt mein Fehler in meinem Code irgendwo. :/

Aber es ist schon Mal gut zu wissen dass es flashen geht.

von pegel (Gast)


Lesenswert?

Sehr schön.
Jetzt musst du entscheiden ob du alles "zu Fuß" machen willst, oder Libs 
und HAL zu Hilfe nimmst.
Ohne Debugger würde ich letzteres bevorzugen.

Hast ja gesehen wie einfach das geht ;)

von Kristian (Gast)


Lesenswert?

Japp, hab eigentlich libs.
Ist mein erstes STM32 Projekt, daher wollte ich es mir einfach machen.
Habe die CooCox IDE geladen, aber die ist ja mal Grütze. Jedoch gabs da 
fertige libs zum reinladen, aber scheinbar nicht wirklich 
funktionsfähig... :(

von pegel (Gast)


Lesenswert?

Meinen Vorschlag kennst du.
Hatte noch keine Probleme mit den aktuellen Versionen, da beides von ST 
unterstützt wird und inzwischen recht ausgereift scheint.

von Kristian (Gast)


Lesenswert?

Ja, ST-Link ist bestellt :) Wahrscheinlich bin ich so ungeduldig, dass 
ich es vorher schon versuche zu fixen.
Aber danke nochmal.

Gibts eigentlich für die STM32 dann eine bessere IDE als dieses CooCox?

von pegel (Gast)


Lesenswert?

Das meinte ich mit CubeMX und SW4STM32.

Es ist eclipse neon mit einem Plugin von AC6.

von pegel (Gast)


Lesenswert?


von pegel (Gast)


Lesenswert?

Vergiss das Video.
In der neuen Version ist es einfacher geworden.

von Kristian (Gast)


Lesenswert?

Haha es geht. Knaller :)

Danke vielmals

von Kristian (Gast)


Lesenswert?

Diese IDEs sind ja depremierender als alles was ich bis jetzt gesehen 
habe.

Ich versuche jetzt seit gestern irgendwie einen USB VCP Stack zum laufen 
zu bekommen, aber CooCox ist buggy, TrueStudio startet nicht und AC6 
WorkBench ignoriert alle Dateien in anderen Ordnern außer /inc und /src.

Davon ab habe ich keine lauffähige Version mit nur einem einfachen VCP 
Stack hinbekommen, selbst das von STMCubeMX generierte erzeugt 
durchgehend Fehler... Frustrierendes Programmieren...

von pegel (Gast)


Lesenswert?

Kristian schrieb:
> AC6 WorkBench ignoriert alle Dateien in anderen Ordnern außer /inc und /src

Lass den Index neu aufbauen.

von pegel (Gast)


Lesenswert?

Ein CubeMX -> AC6 CDC Projekt lief bei mir sofort.

von Kristian (Gast)


Angehängte Dateien:

Lesenswert?

Hab die Toolchain auf einem anderen Laptop installiert, da compiliert es 
das STM32CubeMX Projekt auf Anhieb. Irgendwie hat mein PC ein 
Konfig-Fehler. Egal, Problem für später.

Schlimmer ist das Problem, dass ich den VCP Stack nicht zum laufen zu 
bekommen auf dem Board.

Nach langem versuchen und trial-and-error habe ich mal nach einem Guide 
gesucht und diesen gefunden:
http://microtechnics.ru/en/stm32cube-and-usb-virtual-com-port-2/
Er ist zwar für ein anderen STM32, aber auch ein F4. Macht eigentlich 
fast alles so wie ich vorher auch, außer ein SYSCLK

Ich habe alles soweit genau so, abgesehen von der fehlenden VBUS 
Leitung, daher dort auch kein Harken. Dafür noch eine LED hinzugefügt, 
die blinkt.

Die LED blinkt auch, nur es wird gar kein USB Gerät erkannt.
Was mach ich noch falsch? Ich würde erwarten dass es nach dem ich es per 
CubeMX generiert habe, es out-of-the-box läuft, so ließt man es ja im 
mehrfach.

Beitrag #5176275 wurde vom Autor gelöscht.
von Kristian (Gast)


Angehängte Dateien:

Lesenswert?

Ich bin die Clock Settings noch Mal durch und schaue dass alle 
Funktionen in der MX_USB_DEVICE_Init() den Rückgabewert USBD_OK haben.
Immer noch kein Erfolg...

von pegel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo noch mal

ich habe kein F4 zur Zeit hier, für das Nucleo-F746 habe ich das 
minimalste USB CDC erstellt.

in CubeMX:
- ext. 8MHz bypass
- Takt auf 216MHz, USB Takt auf 48MHz
- USB Device only
- USB Device CDC

in SW4STM32:
- Projekt importiert
- in die main.c Schleife einen Blinker eingebaut
1
  /* USER CODE BEGIN 3 */
2
    HAL_GPIO_TogglePin(LD1_GPIO_Port,LD1_Pin);
3
    HAL_Delay(500);

lsusb zeigt das Ergebnis im Bild.

von Kristian (Gast)


Lesenswert?

Danke für die Hilfe, ich habe as Problem gefunden, war ein Kabelproblem 
zum VBus.

Danke :)

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.