- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 34

Thema: Für lange Winterabende....

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Mein zweites Programm. Dieses Mal wird noch der Button mit einbezogen.
    Die LED wid eingeschaltet, solange der Knopf gedrückt ist.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <stm32f446xx.h>
    
    void configLed(){
      RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;      //Taktversorgung Port A
      GPIOA->MODER |= (GPIO_MODER_MODER5_0);    //A5 => Ausgang
      GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5);     //A5 0> Push-Pull
      GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5);     //A5 ohne Pullup-Pulldown
    }
    
    void configButton(){
      RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;      //Taktversorgung Port C
      GPIOC->MODER |= GPIO_MODER_MODER0_0;      //C13 => Eingang
      GPIOC->PUPDR |= GPIO_PUPDR_PUPDR13_1;     //C13 => Pulldown einschalten
    }
    
    void main(void) {
      configLed();
      configButton();
      printf("Einstellung fertig\n");
    
      while(1){
        if(!(GPIOC->IDR & GPIO_IDR_IDR_13)){
          GPIOA->BSRR |= GPIO_BSRR_BS_5;            //Ausgang A5 setzen
          printf("Knopf gedrückt\n");
        }
        else{
          GPIOA->BSRR |= (GPIO_BSRR_BR_5);          //Ausgang A5 zurücksetzen
          printf("Knopf nicht gedrückt\n");
        }
      }
    }

    Edit:
    Noch eine Frage...gibt es in C eigentlich die Möglichkeit, ein Bit direkt zu kopieren? In Pseudocode ausgedrückt:
    Code:
    PA5 == PC13;
    Sodaß ich mir das If-Statement sparen könnte.
    Geändert von White_Fox (19.06.2016 um 14:19 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo,

    Code:
    GPIOA->BSRR |= (GPIO_BSRR_BR_5);          //Ausgang A5 zurücksetzen
    Müsste lauten:

    Code:
    GPIOA->BSRR &= ~(GPIO_BSRR_BR_5);          //Ausgang A5 zurücksetzen
    Noch eine Frage...gibt es in C eigentlich die Möglichkeit, ein Bit direkt zu kopieren?
    Nur wenn du die Ports als Bitfelder definierst.
    Allerdings spielen dann noch einige compilerspezifische Dinge mit rein.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Sicher? Immerhin funktioniert der Code klaglos.

    Code:
    GPIOA->BSRR |= GPIO_BSRR_BS_5;            //Ausgang A5 setzen
    Code:
    GPIOA->BSRR |= (GPIO_BSRR_BR_5);          //Ausgang A5 zurücksetzen
    Ich hatte das jetzt als "Bit rücksetzen" interpretiert. Ob das auch funktioniert wenn ich eine 0 ins BS-Register schreibe probiere ich gleich mal aus...


    Edit:
    Nein, das funktioniert nicht. Das wird zwar ohne Klagen kompiliert, die LED geht dann aber nicht mehr aus.
    Geändert von White_Fox (19.06.2016 um 19:46 Uhr)

Ähnliche Themen

  1. Zeichenroutine dauert zu lange
    Von avrrobot im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 08.03.2012, 19:33
  2. Lange Leitung - oder was?
    Von manu418 im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 13.10.2010, 15:09
  3. Lange Leiterbahn abschliessen ?
    Von Mandi Nice im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 21.06.2008, 22:35
  4. Lange Leitung!
    Von waste im Forum Kopfnüsse / Wissensquiz
    Antworten: 20
    Letzter Beitrag: 10.02.2007, 22:09
  5. Timer für lange Laufzeiten
    Von toetzel im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 20.11.2006, 17:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test