STM32 Registerzugriff

Gast #3710418
Lesenswert?

Hallo,
bin gerade dabei mich mit einem STM32F103 zu beschäftigen. Hierbei ist 
mir nicht ganz klar wie ein Registerzugriff über folgende Befehlszeile

GPIOA->BRR = GPIO_Pin_2;

funktioniert bzw. wie kommt es zu dem -> (Pfeil).

GPIOA->BRR muss doch irgendwo instanziert oder definiert werden.

Danke für eine Aufklärung,

Volker
Gast #3710420
Lesenswert?

Volker schrieb:
> GPIOA->BRR muss doch irgendwo instanziert oder definiert werden.
Wird es auch. Schau mal in die entsprechende "stm32f10x.h".
1
typedef struct
2
{
3
  __IO uint32_t CRL;
4
  __IO uint32_t CRH;
5
  __IO uint32_t IDR;
6
  __IO uint32_t ODR;
7
  __IO uint32_t BSRR;
8
  __IO uint32_t BRR;
9
  __IO uint32_t LCKR;
10
} GPIO_TypeDef;
11

12
#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
13
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
14
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
15
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
Gast #3710433
Lesenswert?

Danke das war die die Antwort die ich gesucht habe. Habe mir das schon 
irgendwie gedacht, da es ja ein Zugriff eine Strukturvariable ist.

Foo kannst du mir auch sagen wo das niedergeschrieben ist mit dem ->.

Ist das reguläre C-Syntax?

Gruß und Danke, Volker
Gast #3710495
Lesenswert?

Der -> sagt dir, das du gerade nicht mit einem Objekt (klasse, strukt 
und co.) sondern mit einem Zeiger auf ein Objekt arbeitest.
1
typedef struct
2
{
3
  int variable;
4
}MY_STRUCT;
5

6

7
int main(void)
8
{
9
  MY_STRUCT  my_struct;
10
  MY_STRUCT* pointer_to_struct;
11
  pointer_to_struct = &my_struct;
12
  
13
  my_struct.variable = 0;
14
  pointer_to_struct->variable = 1;
15

16
  return 0;
17
}
Die letzen zwei Zeilen machen das gleichen: den Wert der struct 
variablen zu verändern.

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