- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 19

Thema: STM32F100/ Capture Compare Unit

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Hallo;

    Ich werde bald verrückt

    Ich verstehe nicht wo steckt meinen Fehler.
    fast(90%) Jede Zeile verstehe ich, und bin ich sogar sicher dass es so richtig aber 1% falsch reicht um den Programm wahnsinnig zu machen.

    Ich brauche jede kleine Hinweise, Tipp, Orientierung bitte....!


    /* Includes */

    #include <stddef.h>
    #include "stm32f10x.h"

    /* ---------------------------Private typedef -------------------------------*/
    TIM_TimeBaseInitTypeDef TIM2_Configuration;
    NVIC_InitTypeDef NVIC_InitStructure;
    TIM_OCInitTypeDef Output_Compare;
    TIM_ICInitTypeDef Input_Capture;
    GPIO_InitTypeDef GPIO_Inity;

    /*Variable*/

    uint32_t Interrupt_Counter = 0;

    /*# ************************************************** *****************************/*/

    void RCC_Configuration(void)
    {
    /* TIM2clock= SystemCoreColock, enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    /* GPIOA clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    /* ALTERNATE FUNCTION ENABLE*/
    RCC_APB1PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

    /* GPIOC clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    }

    /************************************************** *****************************/
    void GPIO_Setup ()
    {
    /* LEDs pin (PC.08 and 09) configuration */
    GPIO_Inity.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Inity.GPIO_Mode =GPIO_Mode_Out_PP;
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;

    /* TIM2 PA.0 configuration*/
    GPIO_Inity.GPIO_Mode =GPIO_Mode_AF_PP;// soll ich PULL-Down oder Pull up werwenden wenn der
    // Eingang als Pull-Down Konfiguriert?
    // Der AF weil bei dieser Pin wir der Alternate Function verwendet
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
    GPIO_Inity.GPIO_Pin =GPIO_Pin_0;

    GPIO_Init(GPIOA, &GPIO_Inity);
    GPIO_Init(GPIOC, &GPIO_Inity);

    }

    /************************************************** ******************************/

    void TIM2_SETUP ()
    {

    /*----Time_Base_Counter-----*/

    TIM2_Configuration.TIM_CounterMode= TIM_CounterMode_Up;
    TIM2_Configuration.TIM_ClockDivision= 0;
    TIM2_Configuration.TIM_Period=65535;
    TIM2_Configuration.TIM_Prescaler=1;
    TIM_TimeBaseInit(TIM2,&TIM2_Configuration);

    /*----Input_Capture Mode CH1----*/
    Input_Capture.TIM_ICSelection = TIM_ICSelection_IndirectTI;// hier verstehe ich der Unterschied
    // zwischen Direct und Indirekt nicht
    // wirklich, aber ich verwende Direct weil ich
    // kein remaping durchführe
    Input_Capture.TIM_ICPolarity= TIM_ICPolarity_Rising;
    Input_Capture.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    Input_Capture.TIM_Channel= TIM_Channel_1;
    Input_Capture.TIM_ICFilter = 0;

    TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);// dieze Zeile verstehe ich überhaupt nicht
    TIM_ICInit(TIM2, &Input_Capture);

    TIM_Cmd(TIM2, ENABLE);

    /*----Enable the Capture Compare Interrupt Request-----*/
    TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);

    }

    /************************************************** ******************************/
    void NVIC_SETUP ()
    {
    /* Enable the TIM2 global Interrupt */

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty=0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    NVIC_InitStructure.NVIC_IRQChannel= TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }

    /************************************************** ******************************/

    void delayLoop()
    {
    volatile uint32_t delayCount = 1000000;
    while (delayCount > 0)
    {
    delayCount--;
    }
    }


    /*+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++*/

    int main (void)
    {
    RCC_Configuration();
    GPIO_Setup();
    TIM2_SETUP();

    while (1)
    {

    if(INT_Counter ==1)
    {
    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();

    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();
    GPIOC->BSRR = GPIO_Pin_9; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_9; // LED Off
    delayLoop();

    }

    }
    return 0;
    }

    void TIM2_IRQHandler (void)
    {
    // Interrupt Flag muß per Software gelöscht werden

    TIM_ClearFlag(TIM2, TIM_FLAG_Update);

    INT_Counter++;
    }


    Ich danke Ihnen.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    /*Variable*/

    uint32_t Interrupt_Counter = 0;
    Diese soll als "volatile" declariert werden, da er in einen Interrupt gaendert wird.
    /* TIM2 PA.0 configuration*/
    GPIO_Inity.GPIO_Mode =GPIO_Mode_AF_PP;// soll ich PULL-Down oder Pull up werwenden wenn der
    // Eingang als Pull-Down Konfiguriert?
    Soll ich als Eingang declarieren, ein AF_PP ist eher ein Ausgang für PWM und solche zu steuern. Bei mir functioniert die ICP beim Eingang declariert als GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    Input_Capture.TIM_ICSelection = TIM_ICSelection_IndirectTI;// hier verstehe ich der Unterschied
    // zwischen Direct und Indirekt nicht
    // wirklich, aber ich verwende Direct weil ich
    // kein remaping durchführe
    Ein Timer channel ist normalerweise fast an einen Pin zugewiesen. TIM2 CH1 ist standaard verbunden an pin A0. Da gibt noch eine moglichkeit diese TIM2 CH1 auf einen andere pin zu acivieren : pin A15. Da ist dan eine "REMAP", wird activiert ueber "Indirect"
    TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);// dieze Zeile verstehe ich überhaupt nicht
    Verwende ich nicht beim Input cature. Wird genutzt beim "external clock" configuration. Diese info steht in die TIM library. :
    /**
    * @brief Configures the TIMx Internal Trigger as External Clock
    * @param TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
    * @param TIM_ITRSource: Trigger source.
    * This parameter can be one of the following values:
    * @param TIM_TS_ITR0: Internal Trigger 0
    * @param TIM_TS_ITR1: Internal Trigger 1
    * @param TIM_TS_ITR2: Internal Trigger 2
    * @param TIM_TS_ITR3: Internal Trigger 3
    * @retval None

    Welche compiler verwenden sie ?

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Hallo,

    Danke für die schnelle Antwort.
    ich habe Ihren Hinweise befolgen, was Sie oben erwähnt haben, aber leider immer erfolglos.
    Langsam langsam verzweifle ich an das Bord. es muss irgendwie an das Bord liegen. weil das Code soll fehlerlos laufen oder?

    Ich verwende den Atolic/TrueSTUDIO STM32 Lite 2.1.0 (STMicroelectronics ST-Link_V2_USBdriver).

    Danke.


    /* Includes */

    #include <stddef.h>
    #include "stm32f10x.h"

    /* ---------------------------Private typedef -------------------------------*/
    TIM_TimeBaseInitTypeDef TIM2_Configuration;
    NVIC_InitTypeDef NVIC_InitStructure;
    //TIM_OCInitTypeDef Output_Compare;
    TIM_ICInitTypeDef Input_Capture;
    GPIO_InitTypeDef GPIO_Inity;

    /*---------------------------Global Variable---------------------------------*/
    volatile uint32_t INT_Counter = 0;



    /************************************************** *****************************
    # * Function Name : RCC_cONFIGURATION
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/

    void RCC_Configuration(void)
    {
    /* TIM2clock= SystemCoreColock, enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    /* GPIOA clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    /* ALTERNATE FUNCTION ENABLE*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

    /* GPIOC clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    }

    /************************************************** *****************************
    # * Function Name : GPIO_SETUP
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/

    void GPIO_Setup ()
    {
    /* LEDs pin (PC.08 and 09) configuration */
    GPIO_Inity.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Inity.GPIO_Mode =GPIO_Mode_Out_PP;
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;

    /* TIM2 PA.0 configuration*/
    GPIO_Inity.GPIO_Mode =GPIO_Mode_IN_FLOATING;// soll ich PULL-Down oder Pull up werwenden wenn der
    //Eingang als Pull-Down Konfiguriert?
    //Der AF weil bei dieser Pin wir der Alternate Function verwendet
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
    GPIO_Inity.GPIO_Pin =GPIO_Pin_0;

    GPIO_Init(GPIOA, &GPIO_Inity);
    GPIO_Init(GPIOC, &GPIO_Inity);

    }

    /************************************************** *****************************
    # * Function Name : TIM2_SETUP
    # * Description : Timer2 as Output/Compare
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/

    void TIM2_SETUP ()
    {

    /*----Time_Base_Counter-----*/

    TIM2_Configuration.TIM_CounterMode= TIM_CounterMode_Up;
    TIM2_Configuration.TIM_ClockDivision= 0;
    TIM2_Configuration.TIM_Period=65535;
    TIM2_Configuration.TIM_Prescaler=1;
    TIM_TimeBaseInit(TIM2,&TIM2_Configuration);

    /*----Input_Capture Mode CH1----*/
    Input_Capture.TIM_ICSelection = TIM_ICSelection_DirectTI;// hier verstehe ich der Unterschied
    // zwischen Direct und Indirekt nicht
    //wirklich, aber ich verwende Direct weil ich
    // kein remaping durchführe
    Input_Capture.TIM_ICPolarity= TIM_ICPolarity_Rising;
    Input_Capture.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    Input_Capture.TIM_Channel= TIM_Channel_1;
    Input_Capture.TIM_ICFilter = 0;

    TIM_ICInit(TIM2, &Input_Capture);
    TIM_Cmd(TIM2, ENABLE);

    /*----Enable the Capture Compare Interrupt Request-----*/
    TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);

    }

    /************************************************** *****************************
    # * Function Name : Configure the nested vectored interrupt controller.
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void NVIC_SETUP ()
    {
    /* Enable the TIM2 global Interrupt */

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty=0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    NVIC_InitStructure.NVIC_IRQChannel= TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }

    /************************************************** *****************************
    # * Function Name : delayloop
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/

    void delayLoop()
    {
    volatile uint32_t delayCount = 1000000;
    while (delayCount > 0)
    {
    delayCount--;
    }
    }


    /*+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++*/

    int main (void)
    {
    RCC_Configuration();
    GPIO_Setup();
    TIM2_SETUP();
    NVIC_SETUP();



    while (1)
    {

    if(INT_Counter ==1)
    {
    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();

    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();
    GPIOC->BSRR = GPIO_Pin_9; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_9; // LED Off
    delayLoop();


    }

    }
    return 0;
    }

    void TIM2_IRQHandler (void)
    {
    // Interrupt Flag muß per Software gelöscht werden

    TIM_ClearFlag(TIM2, TIM_FLAG_Update);

    INT_Counter++;
    }

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Ich habe mal ihre code mit den IAR compiler in meines Discovery board versucht. Das scheint zu functionieren. Jeden mal das ich den user button drucke, erhoht die variable "INT_count", und die LEDS fangen an zu blinken Ich habe nur kleine aenderungen gemacht wegend andere compiler. Moglich sind andere systemfiles auch noch wichtig (Clock Init).
    Ich kopîere das nochmal hierein.
    Code:
    /* Includes */
    #include <stddef.h>
    #include "stm32f10x.h"
    /* ---------------------------Private typedef -------------------------------*/
    TIM_TimeBaseInitTypeDef TIM2_Configuration;
    NVIC_InitTypeDef NVIC_InitStructure;
    //TIM_OCInitTypeDef Output_Compare;
    TIM_ICInitTypeDef Input_Capture;
    GPIO_InitTypeDef GPIO_Inity;
    /*---------------------------Global Variable---------------------------------*/
    volatile uint32_t INT_Counter = 0;
    volatile uint32_t delayCount;
    
    /************************************************** *****************************
    # * Function Name : RCC_cONFIGURATION
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void RCC_Configuration(void)
    {
    /* TIM2clock= SystemCoreColock, enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    /* GPIOA clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    /* ALTERNATE FUNCTION ENABLE*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    /* GPIOC clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    }
    /************************************************** *****************************
    # * Function Name : GPIO_SETUP
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void GPIO_Setup ()
    {
    /* LEDs pin (PC.08 and 09) configuration */
    GPIO_Inity.GPIO_Pin =GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Inity.GPIO_Mode =GPIO_Mode_Out_PP;
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
    /* TIM2 PA.0 configuration*/
    GPIO_Inity.GPIO_Mode =GPIO_Mode_IN_FLOATING;// soll ich PULL-Down oder Pull up werwenden wenn der
    //Eingang als Pull-Down Konfiguriert?
    //Der AF weil bei dieser Pin wir der Alternate Function verwendet
    GPIO_Inity.GPIO_Speed =GPIO_Speed_50MHz;
    GPIO_Inity.GPIO_Pin =GPIO_Pin_0;
    GPIO_Init(GPIOA, &GPIO_Inity);
    GPIO_Init(GPIOC, &GPIO_Inity);
    }
    /************************************************** *****************************
    # * Function Name : TIM2_SETUP
    # * Description : Timer2 as Output/Compare
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void TIM2_SETUP ()
    {
    /*----Time_Base_Counter-----*/
    TIM2_Configuration.TIM_CounterMode= TIM_CounterMode_Up;
    TIM2_Configuration.TIM_ClockDivision= 0;
    TIM2_Configuration.TIM_Period=65535;
    TIM2_Configuration.TIM_Prescaler=1;
    TIM_TimeBaseInit(TIM2,&TIM2_Configuration);
    /*----Input_Capture Mode CH1----*/
    Input_Capture.TIM_ICSelection = TIM_ICSelection_DirectTI;// hier verstehe ich der Unterschied
    // zwischen Direct und Indirekt nicht
    //wirklich, aber ich verwende Direct weil ich
    // kein remaping durchführe
    Input_Capture.TIM_ICPolarity= TIM_ICPolarity_Rising;
    Input_Capture.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    Input_Capture.TIM_Channel= TIM_Channel_1;
    Input_Capture.TIM_ICFilter = 0;
    TIM_ICInit(TIM2, &Input_Capture);
    TIM_Cmd(TIM2, ENABLE);
    /*----Enable the Capture Compare Interrupt Request-----*/
    TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
    }
    /************************************************** *****************************
    # * Function Name : Configure the nested vectored interrupt controller.
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void NVIC_SETUP ()
    {
    /* Enable the TIM2 global Interrupt */
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    NVIC_InitStructure.NVIC_IRQChannel= TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    }
    /************************************************** *****************************
    # * Function Name : delayloop
    # * Description : .
    # * Input : None
    # * Output : None
    # * Return : None
    # ************************************************** *****************************/
    void delayLoop()
    {
    delayCount = 1000000;
    while (delayCount > 0)
    {
    delayCount--;
    }
    }
    
    /*+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++*/
    int main (void)
    {
    RCC_Configuration();
    GPIO_Setup();
    TIM2_SETUP();
    NVIC_SETUP();
     
    while (1)
    {
    if(INT_Counter >1)
    {
    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();
    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();
    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();
    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();
    GPIOC->BSRR = GPIO_Pin_9; // LED On
    delayLoop();
    GPIOC->BRR = GPIO_Pin_9; // LED Off
    delayLoop();
    
    }
    }
    return 0;
    }
    //steht bei mir in eine ander file : STM32F10x_it.c
    void TIM2_IRQHandler (void)
    {
    // Interrupt Flag muß per Software gelöscht werden
    TIM_ClearFlag(TIM2, TIM_FLAG_CC1);
    //TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); 
    INT_Counter++;
    }
    Ha der Atollic compiler auchj eine debugger ?
    Fiel erfolg !!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Hallo,

    vielen Dank nochmal für Ihre Mühe. Sie haben mir sehr viel geholfen.

    Ja, der Atolic hat schon Debugger.

    Den Code werde ich gleich testen.
    Danke.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    das ist ein Rätzel, den ich nie im Leben verstehen würde.
    es funktioniert nicht!
    bei Debugg gehts rein in der If_schleife aber die LEDS leuchten nicht obwohl er bei LED-On steht.

    Bei meinem Versuch er konnte überhaupt die If_schleife nicht ausführen.

    wenn ich andere Programme bedugge, dann leuchten die Leds ganz normal. nur bei diesem Code leuchten sie nicht.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    07.07.2011
    Beiträge
    35
    Ich hab das Programm (Toggle LED) aus dem EXamble genommen und debuggert. Es hat supper funktioniert.
    Step by step habe ich das Programm erweitert und bei jede Erweiterung habe das Programm erneut debugg um ich sicher zu sein dass die neue erweiterung hat die Funktion von Blinken_Leds nicht beeinflüssen.


    1) habe ich NVIC und Inputcapture hingeschrieben. debuggert--> LEDs leuchten.ok!
    2)danach die VOLTEILE, debuggert---> LEDS leuchten.ok!
    3)RCC-Configuration hingefügt, debuggert-->LEDs leuchten. Ok!
    4) dann das GPIO-MODE habe ich von IPD zu In_Floating geändert,debuggert--->LEDS leuchten nicht!! ok das ist Normal.

    Was ich annormal finde, dass ich den GPIO-MODE auf IPD zurücksetze und trotzdem leuchten die LEDS nicht. warum?

    mehr als diese 4 schritte habe ich and das Programm von LED-Toggle nicht geändert und sie leuchten nicht mehr obwohl sie besitzen den Orginalen Zustand.

    was könnte dahinten stecken????

    Danch habe ich die RCC von AFIO deaktiviert, trotzdem leuchten die LEDS nicht mehr.


    /* Includes */

    #include <stddef.h>
    #include "stm32f10x.h"

    NVIC_InitTypeDef NVIC_InitStructure; <-- das ist die erste 'Änderung, LEDs leuchten noch
    TIM_ICInitTypeDef Input_Capture;
    GPIO_InitTypeDef GPIO_Inity;


    volatile uint32_t INT_Counter = 0;<-- zwite Erweiterung, LEDS leuchten noch
    volatile uint32_t delayCount;



    void RCC_Configuration(void)
    {
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); <-- dritte, LEDS leuchten
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);<-- vierte, LEDS leuchten nicht mehr
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    }

    void delayLoop()
    {
    volatile uint32_t delayCount = 1000000;
    while (delayCount > 0)
    {
    delayCount--;
    }
    }


    void GPIO_Setup ()
    {
    GPIO_InitTypeDef GPIO_Inity;
    GPIO_Inity.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Inity.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_Inity);

    GPIO_Inity.GPIO_Pin = GPIO_Pin_1;
    GPIO_Inity.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_Inity);
    }


    int main (void)
    {
    uint8_t read_A0 = 0;
    SystemInit();
    GPIO_Setup();


    while (1)
    {

    read_A0 =GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);

    if(read_A0)
    {
    GPIOC->BSRR = GPIO_Pin_8; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_8; // LED Off
    delayLoop();

    GPIOC->BSRR = GPIO_Pin_9; // LED On
    delayLoop();

    GPIOC->BRR = GPIO_Pin_9; // LED Off
    delayLoop();
    }
    }
    return 0;
    }

Ähnliche Themen

  1. ISR per Output Compare funktioniert nicht wie gewünscht
    Von Sebastian132 im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 24.07.2006, 12:22
  2. Fragen zu Compare -> Timer
    Von Rage_Empire im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 21.11.2005, 19:35
  3. Problem mit Timer1 und Compare...
    Von Murus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 12.11.2005, 17:34
  4. Compare Register
    Von chouifi im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 31.10.2005, 14:47
  5. Wie Compare Register Werte sicher ändern?
    Von Werner_Just im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 22.04.2005, 15:29

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress