Hallo!
Ich habe ein stm32f4-discovery board. Ich habe gesehen dass manche es
wie das echte Assembler - mäßig programmieren, also mit bits in Adressen
setzen, beispiel:
So programmieren nur Idioten, denn das kann man selber nach 3 Wochen
nicht mehr lesen. Selbst mit dem Manual (Reference Manual, Family Manual
oder ähnlich) kann man das nur mit viel Mühe entziffern.
Die Hersteller liefern normalerweise benutzbare Header mit,
womit man Code so schreiben kann:
1
RCC->AHB1RSTR = RESET_PORTD;
.. und der Präprozessor + Compiler daraus das macht, was im OP steht.
Jim Meba schrieb:> So programmieren nur Idioten, denn das kann man selber nach 3> Wochen> nicht mehr lesen. Selbst mit dem Manual (Reference Manual, Family Manual> oder ähnlich) kann man das nur mit viel Mühe entziffern.>> Die Hersteller liefern normalerweise benutzbare Header mit,> womit man Code so schreiben kann:RCC->AHB1RSTR = RESET_PORTD;>> .. und der Präprozessor + Compiler daraus das macht, was im OP steht.
Toller Umgang... aber wenigstens eine indirekte Beantwortung der Frage.
Schau mal nach dem "Programming Manual", da sollte das drin stehen.
Gruß
Dennis
@ Martin Fischer (martin_f70)
>Meine Frage: Wo kann ich nachgucken welche Adressen die register haben>und welche Werte bestimmte dinge haben die ich setzten möchte?
In den header Files. Aber die absoluten Adressen will man ja gerade
NICHT verwenden, weil die alles andere als aussagekräftig sind.
*((uint32_t volatile *)(0x40023810))=0x08; // RCC->AHB1RSTR ---> reset
PORTD
Endlose Schreiberei, fehleranfällig, Kommentar nötig, Kommentar kan
durch Copy & Paste oder wasauchimmer falsch sein.
RCC->AHB1RSTR = RESET_PORTD;
Kurz, prägnant, selbsterklärend!
Noch Fragen, Kienzle?
Martin Fischer schrieb:> Meine Frage: Wo kann ich nachgucken welche Adressen die register haben> und welche Werte bestimmte dinge haben die ich setzten möchte?
Im Reference Maual, siehe Anhang. Da findest du die Adressen der
Register, usw.
Mit dem Umrechnen von Hexadezimal in Binär hast du es nicht so, oder?
0x55000000 ist doch einfach nur
0b01010101 00000000 00000000 00000000
Und die gesetzten Bits entsprechen dann denen in deinem Register.
Tu dir einen Gefallen und nimm die von den includes gelieferten
Mnemonics bzw. structs, die entsprechen denen in der Referenz und laufen
dann auch auf anderen STM32.
Wenn du unbedingt Assembler machen willst, brauchst du aber noch ein
paar Grundlagen in Zahlensystemen.
>Ok danke, aber eien Frage noch: wo gibt es eine liste von den defines,STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\Libraries\CMSIS\Device\ST\STM32F4xx\I
nclude\stm32f4xx.h
holger schrieb:
> STM32F4xx_DSP_StdPeriph_Lib_V1.3.0\...
Ist diese StdPeriph_Lib nicht vor geraumer Zeit durch CubeMX (oder so
ähnlich) ersetzt worden? Oder was ist dann dieses Cube-Zeugs?
Ahh habs schon: 0b01010101 00000000 00000000 00000000 -> Pin 12,
13,14,15 weil für jedes bit 2 werte sind(010101..)
Aber wie kann ich dort dann den port 30 einschalten?
Die Ports haben nur 16 bit. Wie wäre es denn, wenn du dir erstmal ein
paar Beispielprogramme anschaust und evtl. den Schaltplan vom Discovery
Board? Da fehlen wirklich jede Menge Grundlagen.
Oder zum Beispiel Uwes Grundlagen fürs Board?
http://mikrocontroller.bplaced.net/wordpress/?page_id=46
Der Schaltplan fürs Board ist Bestandteil des Dokuments UM1472 von STM.
Wenn ich ehrlich sein soll, das board bekomme ich erst morgen, ich gucke
nur so tutorials schon an und versuche so bissl was zu verstehen, jetzt
habe ich aber alles verstanden