STM32 FW_LIB wozu dient RCC_APB2PeriphClockCmd?

OP #1685454
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:
1
00061   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
2
00062                          RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
3
00063                          RCC_APB2Periph_GPIOE, ENABLE);
4
00064 
5
00065   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
6
00066   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
7
00067   GPIO_Init(GPIOA, &GPIO_InitStructure);
8
00068   GPIO_Init(GPIOB, &GPIO_InitStructure);
9
00069   GPIO_Init(GPIOC, &GPIO_InitStructure);
10
00070   GPIO_Init(GPIOD, &GPIO_InitStructure);
11
00071   GPIO_Init(GPIOE, &GPIO_InitStructure);
12
00072 
13
00073   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
14
00074                          RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
15
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
OP
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
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:
1
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:
1
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:
1
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.
Angehängte Dateien:
Gast
>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.
Gast
>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.
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.