STM32F4 pointer Frage

OP #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.
OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.