Forum: Mikrocontroller und Digitale Elektronik STM32 gpio_init() -- was haltet ihr von dieser Version?


von Schaulus Tiger (Gast)


Angehängte Dateien:

Lesenswert?

hallo!

hier im Forum findet man jede Menge Beiträge mit vielen Zeilen in der 
Art "gpioInit.GPIO_Mode = GPIO_Mode_OUT;". Die waren mir sowieso zu 
kompliziert. Dann hab' ich mir das cubeMX Paket von ST geholt und diese 
Konstruktionen da drin nicht gefunden. Kann schon sein, dass es sie 
gibt, aber nach ein paar Tagen hab' ich aufgegeben.

Also hab' ich etwas noch komplizierteres gebastelt. Wichtig war mir, 
dass ich die Signalnamen aus dem Schaltbild nachher im Programm wieder 
finde und dass ich Hardware-Änderungen leicht in die Header-Datei 
übernehmen kann. Diese Datei hat genau eine Zeile pro Pin, inkl. aller 
Optionen.

Die Frage ist jetzt, ob das außer mir noch jemand lesen kann.
1
//  main.c
2
3
#include "mein_F205_board.h"
4
#include "mcu/gpio.h"
5
6
int
7
main (void)
8
{
9
  if ((GPIOC->IDR & PC_SERVICE_L) == 0) {
10
    enable_god_mode ();
11
  }
12
  for (;;) {
13
    mach_was ();
14
  }
15
  return 0;
16
}

von hp-freund (Gast)


Lesenswert?

Wie im anderen Beitrag schon erwähnt kenne ich das Problem auch:
hat man eine Weile nichts damit gemacht, fängt man (nahe) Null an.

Deshalb nutze ich fast ausschließlich die Auto-Vervollständigung von 
eclipse.

Das hilft der alten löchrigen Birne enorm und man muss auch keine neuen 
Sachen erfinden die man sich dann ja auch wieder merken muss.

Die einfachen Board spezifischen defines lassen sich da leicht mit 
aufnehmen - und man muss sich nicht so viel merken.
Dafür sind ja Computer da ;-)

von grundschüler (Gast)


Lesenswert?

ich verwende eine uc-übergreifende defines.h-Datei. Danach geht es dann 
mit Einfachst-Macros weiter, so dass man sich nur einmal mit den defines 
beschäftigen muss:
1
  
2
#define GLUE(a, b)  a##b
3
#define sbi(var, bit) (var|=1<<bit)//set
4
#define cbi(var, bit) (var&=~(1<<bit))//clear
5
#define tbi(var, bit) (var^=1<<bit)//toggle
6
#define gbi(var, bit) (var>>bit&1)//get
7
#define wait  _delay_ms(1000)
8
#define wait10  {_delay_ms(3333);_delay_ms(3333);_delay_ms(3333);}
9
#define u8  uint8_t
10
#define u16 uint16_t
11
#define u32 uint32_t
12
#define v volatile
13
14
#if AVR  
15
#define PORT(x)          GLUE(PORT, x)
16
#define PIN(x)          GLUE(PIN, x)
17
#define DDR(x)          GLUE(DDR, x)
18
#define pinSET(x,y)     PORT(x) |=(1<<y)
19
#define pinCLR(x,y)     PORT(x)&=~(1<<y)
20
#define pinTOG(x,y)     PORT(x)^=(1<<y)
21
#define pinDIRin(x,y)     DDR(x)&=~(1<<y)
22
#define pinDIRout(x,y)     DDR(x)|=(1<<y)
23
#define pinVAL(x,y)     (PIN(x)&(1<<y))
24
//  #define MINimal(x,y)  ((x<y) ? x : y)
25
#define pinPULLUP(x,y,z)   (z)?PORT(x)|=(1<<y):PORT(x)&=~(1<<y)//0_no 1_up 
26
#define ux  uint8_t
27
//_delay_us
28
#include <util/delay.h>
29
#endif
30
31
#if stm
32
#define GPIO(x)    GLUE(GPIO, x)
33
#define RCC_APB2Periph_GPIO(x)    GLUE(RCC_APB2Periph_GPIO, x)
34
//    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO(x)  , ENABLE);
35
#define PIN(x)    GLUE(GPIO_PIN_,x)
36
#define pinSET(x,y) GPIO(x)->ODR |=(1<<y)
37
#define pinCLR(x,y) GPIO(x)->ODR &=~(1<<y)
38
GPIO_InitTypeDef GPIO_InitStructure;
39
#define pinDIRout(x,y) { \
40
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
41
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP; \
42
    GPIO_InitStructure.GPIO_Pin   = 1<<y ; \
43
    GPIO_Init(GPIO(x), &GPIO_InitStructure);}
44
45
#define pinDIRin(x,y) { \
46
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
47
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; \
48
  GPIO_InitStructure.GPIO_Pin = 1<<y; \
49
  GPIO_Init(GPIO(x), &GPIO_InitStructure);}
50
51
/*0_no 1_up 2_down*/ 
52
#define pinPULLUP(x,y,z) { \
53
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
54
    GPIO_InitStructure.GPIO_Mode  = z; \
55
    GPIO_InitStructure.GPIO_Pin   = 1<<y ; \
56
    GPIO_Init(GPIO(x), &GPIO_InitStructure);}
57
58
59
60
61
#define pinVAL(x,y) (GPIO(x)->IDR)&(1<<(y))
62
63
64
#define pinTYPE(x,y) GPIO(x)->OTYPER&=~(3<<(y*2))//
65
#endif
66
//----------------------------------------
67
#define led1_tog   pinTOG(LED1_port,LED1_pin)
68
#define led1_on     pinSET(LED1_port,LED1_pin)
69
#define led1_off     pinCLR(LED1_port,LED1_pin)
70
#define led1_blink {led1_tog;_delay_ms(300);led1_tog;_delay_ms(300);led1_tog;\
71
    _delay_ms(300);led1_tog;_delay_ms(300);}
72
#define led1_init   pinDIRout(LED1_port,LED1_pin);led1_blink;
73
74
#define led2_tog   pinTOG(LED2_port,LED2_pin)
75
#define led2_on     pinSET(LED2_port,LED2_pin)
76
#define led2_off     pinCLR(LED2_port,LED2_pin)
77
#define led2_blink {led2_tog;_delay_ms(300);led2_tog;_delay_ms(300);led2_tog;\
78
    _delay_ms(300);led2_tog;_delay_ms(300);}
79
#define led2_init   pinDIRout(LED2_port,LED2_pin);led2_blink;
80
//pinout
81
#define led_on  led1_on 
82
#define led_off led1_off
83
84
85
#define true 1
86
#define false 0
87
88
void nothing(void){;}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.