STM32 FW_LIB wozu dient RCC_APB2PeriphClockCmd?

OP #1685454
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:
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 #1685464
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
#4284538
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:
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 #4284558
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.

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