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 | }
|