mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 FW_LIB wozu dient RCC_APB2PeriphClockCmd?


Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich mache gerade die ersten Schritte mit meinem STM32 und versuche die 
Beispiele in der Standard Peripheral Library zu verstehen. Im Moment 
einfach mal die GPIO:
00061   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
00062                          RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
00063                          RCC_APB2Periph_GPIOE, ENABLE);
00064 
00065   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
00066   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
00067   GPIO_Init(GPIOA, &GPIO_InitStructure);
00068   GPIO_Init(GPIOB, &GPIO_InitStructure);
00069   GPIO_Init(GPIOC, &GPIO_InitStructure);
00070   GPIO_Init(GPIOD, &GPIO_InitStructure);
00071   GPIO_Init(GPIOE, &GPIO_InitStructure);
00072 
00073   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
00074                          RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
00075                          RCC_APB2Periph_GPIOE, DISABLE);  

Dabei verstehe ich nicht wozu das APB2PeriphClockCmd da ist, bzw. wieso 
dies notwendig ist bevor man die GPIOs konfigurieren kann.

Gruß
Tom

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim STM32 ist ab Reset der Takt der Peripheriemodule abgeschaltet. Ohne 
Takt kann man die nicht verwenden und nicht konfigurieren.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, jetzt hab ichs verstanden, nachdem ich mire den Code von InitLED 
noch angeschaut habe.

Zuerst Schalten die die Clock für alle GPIOs an, konfigurieren sie, dann 
schalten sie die Clocks für alle wieder aus, um dann nur die Clocks für 
die IOs wieder anzuschalten an denen auch eine LED hängt.

Vielen Dank, das war genau der Hinweis, der mir gefehlt hat.

Gruß
Tom

Autor: Dave Anadyr (wilhem)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich rufe diesen alten Thread wieder ins Leben, da ich eine Frage habe, 
die die von Thomas ergänzen könnte. Also passt es ganz genau zu diesem 
Thread.

Ich habe nicht so ganz kapiert, wie man den RCC_APBxPeriph... richtig 
einstellt. Internet liefert unzählige Tutorial, in dem wiederholt wird, 
dass GPIO, SPI, UART usw. mit einem Clock initialisiert werden.

Ok, wie kann ich das Diagramm im Anhang (aus dem Datenblatt des Mikros: 
STM32F407) richtig interpretieren?

Aus dem Diagramm sieht man eindeutig, dass GPIOA durch den AHB1 Bus 
gesteuert wird.
So schreibe ich in mein Code:
RCC_AHB1PeriphClockCmd(GPIOA, ENABLE);

und funktioniert es auch.

Das Problem sind bespielsweise die Module, die an dem APB2 verbunden 
sind.
Diese würde ich mit dem Befehl:
RCC_APB2PeriphClockCmd(UART1, ENABLE);
initialisieren. Doch der im grau markierte Bus AHB scheint mit der UART1 
in Verbindung auch zu sein.
Tatsächlich findet man Beispiele, in denen die obige Zeile mit dem 
folgenden Code ergänzt wird:
RCC_AHB1PeriphClockCmd(UART1, ENABLE);

so verstehe ich nicht so ganz, ob ich die Module, die mit dem Bus APB2 
auch mit dem AHB1/2 initialisiert werden müssen oder nicht.

Danke
Gruß

PS: In diesem Fall war die UART Schnittstelle nur ein Beispiel. Ich 
finde solche Konfigurationen für SPI, I2C usw.

: Bearbeitet durch User
Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>So schreibe ich in mein Code:
>RCC_AHB1PeriphClockCmd(GPIOA, ENABLE);
>
>und funktioniert es auch.

Tatsächlich?

Also bei mir sieht sowas so aus:

  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE );

Und damit ist alles klar.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>so verstehe ich nicht so ganz, ob ich die Module, die mit dem Bus APB2
>auch mit dem AHB1/2 initialisiert werden müssen oder nicht.

Nein, müssen sie nicht.

Autor: Dave Anadyr (wilhem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>So schreibe ich in mein Code:
>>RCC_AHB1PeriphClockCmd(GPIOA, ENABLE);
>>
>>und funktioniert es auch.
>
> Tatsächlich?
>
> Also bei mir sieht sowas so aus:
>
>   RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE );
>
> Und damit ist alles klar.

Ja, du hast Recht. Ich habe mich verschrieben gestern abend.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.