| 1 | GPIO_InitTypeDef  GPIO_InitStructure;
 | 
| 2 | 
 | 
| 3 |     /* Clocks einschalten */
 | 
| 4 |     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
 | 
| 5 | 
 | 
| 6 |     /* HC595_CTRL konfigurieren */
 | 
| 7 |     GPIO_StructInit(&GPIO_InitStructure);
 | 
| 8 |     GPIO_InitStructure.GPIO_Pin   = HC595_DS | HC595_STCP | HC595_SHCP | HC595_MR;
 | 
| 9 |     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
 | 
| 10 |     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 | 
| 11 |     GPIO_Init(HC595_CTRL, &GPIO_InitStructure);
 | 
| 12 | 
 | 
| 13 |     GPIO_ResetBits(HC595_CTRL,HC595_MR);        // Master Reset = Shift Register loeschen
 | 
| 14 |     GPIO_SetBits(HC595_CTRL,HC595_MR);
 | 
| 15 | 
 | 
| 16 |     //GPIO_SetBits(HC595_PWM,HC595_OE);         // Outputs = Z-State
 | 
| 17 |     GPIO_ResetBits(HC595_CTRL,HC595_STCP);      // Storage Register = LOW
 | 
| 18 |     GPIO_ResetBits(HC595_CTRL,HC595_SHCP);      // Shift Register = LOW
 | 
| 19 | 
 | 
| 20 | /* Timer 1 aktivieren und remappen */
 | 
| 21 |     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
 | 
| 22 |     GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);
 | 
| 23 | 
 | 
| 24 |     /* Der Timer clock'ed mit 36Mhz, einstellen auf 200Hz */
 | 
| 25 |    TIM_TimeBaseStructInit(&TimerBaseInitStructure);
 | 
| 26 |    TimerBaseInitStructure.TIM_CounterMode   = TIM_CounterMode_Up;
 | 
| 27 |    TimerBaseInitStructure.TIM_Prescaler     = tim_presc;
 | 
| 28 |    TimerBaseInitStructure.TIM_Period        = DCValue;
 | 
| 29 |    TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
 | 
| 30 |    TIM_TimeBaseInit(TIM1, &TimerBaseInitStructure);
 | 
| 31 | 
 | 
| 32 |    /* Compare Register allgemeine Einstellungen */
 | 
| 33 |    TimerOCInitStructure.TIM_OCMode          = TIM_OCMode_PWM1;
 | 
| 34 |    TimerOCInitStructure.TIM_OutputState     = TIM_OutputState_Enable;
 | 
| 35 |    TimerOCInitStructure.TIM_OCPolarity      = TIM_OCPolarity_Low;
 | 
| 36 | 
 | 
| 37 |    /* Compare Register Channel 1 konfigurieren (Display) */
 | 
| 38 |    TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
 | 
| 39 |    TIM_OC1Init(TIM1, &TimerOCInitStructure);
 | 
| 40 | 
 | 
| 41 |    /* Compare Register Channel 2 konfigurieren (LEDs) */
 | 
| 42 |    TimerOCInitStructure.TIM_Pulse           = DCValue / 2;
 | 
| 43 |    TIM_OC2Init(TIM1, &TimerOCInitStructure);
 | 
| 44 | 
 | 
| 45 |    /* Predload Register Kanal 1 und 2 einschalten */
 | 
| 46 |    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
 | 
| 47 |    TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
 | 
| 48 | 
 | 
| 49 |    /* Compare Register INT de-aktivieren */
 | 
| 50 |    TIM_ITConfig(TIM1,TIM_IT_CC1,DISABLE);
 | 
| 51 |    TIM_ITConfig(TIM1,TIM_IT_CC2,DISABLE);
 | 
| 52 | 
 | 
| 53 |    /* Timer 1 Main Outputs aktivieren und los */
 | 
| 54 |    TIM_ARRPreloadConfig(TIM1, ENABLE);          /* PreLoad Register aktivieren */
 | 
| 55 |    TIM_CtrlPWMOutputs(TIM1, ENABLE);            /* PWM Ausgänge aktivieren */
 | 
| 56 |    TIM_Cmd(TIM1, ENABLE);                       /* Timer 1 los ! */
 | 
| 57 | }
 |