STM32F4 pointer Frage

#3893870
Lesenswert?

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:
1
*((uint32_t volatile *)(0x40023810))=0x08; // RCC->AHB1RSTR ---> reset PORTD

Meine Frage: Wo kann ich nachgucken welche Adressen die register haben 
und welche Werte bestimmte dinge haben die ich setzten möchte?
#3893949
Lesenswert?

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.
#3893961
Lesenswert?

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
#3893968
Lesenswert?

@ 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?
(Firma: matzetronics) #3894024
Lesenswert?

Martin Fischer schrieb:
> 
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf
> -> seite 178: warum ist der wert für PORTD 0x08 ?

Du bist ins falsche Register geraten. In meinem Ref. Manual auf Seite 
168 (Kapitel 6.3.5) ist das RCC->AHB1RSTR (Address Offset 0x10) 
beschrieben. Und GPIOD_RST sitzt auf Bit 3 = 0x08 oder in 32-bit binär:
0b00000000000000000000000000001000
(Firma: matzetronics) #3894044
Lesenswert?

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.
Gast #3894147
Lesenswert?

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?
#3894153
Lesenswert?

Martin Fischer schrieb:
> Martin Fischer schrieb:
>> Also werden Bit 24,26,28 und 30 gesetzt?
>
> bei
>
> Matthias Sch. schrieb:
>> 0x55000000 ist doch einfach nur
>> 0b01010101 00000000 00000000 00000000

Ich werde die defines auch nutzen aber kann mir jemand nurnoch schnell 
das erklären? s. Seite 284 im 
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf
(Firma: matzetronics) #3894227
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren