1 | /* Timer 1 als PWM Generator einstellen für Helligkeit an HC595_OE
|
2 | f = 100Hz
|
3 | */
|
4 |
|
5 | RCC_ClocksTypeDef RCC_Clocks;
|
6 | TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
|
7 | TIM_OCInitTypeDef TimerOCInitStructure_1, TimerOCInitStructure_2;
|
8 |
|
9 | /* Bestimme den APB2 Clock */
|
10 | RCC_GetClocksFreq(&RCC_Clocks);
|
11 | /* Berechne Prescaler und Periode für 1/10 Sekunden */
|
12 | uint32_t tim_presc = RCC_Clocks.PCLK2_Frequency / 10000;
|
13 | uint32_t tim_period = TIM1_FREQ * 10;
|
14 |
|
15 | /* Timer 1 aktivieren und remappen */
|
16 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
|
17 | GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);
|
18 |
|
19 | /* Pin A9 ankoppeln */
|
20 | GPIO_StructInit(&GPIO_InitStructure);
|
21 | GPIO_InitStructure.GPIO_Pin = HC595_OE;
|
22 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
23 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
24 | GPIO_Init(HC595_PWM, &GPIO_InitStructure);
|
25 |
|
26 | /* Der Timer clock'ed mit 36Mhz */
|
27 | TIM_TimeBaseStructInit(&TimerBaseInitStructure);
|
28 | TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
29 | TimerBaseInitStructure.TIM_Prescaler = tim_presc;
|
30 | TimerBaseInitStructure.TIM_Period = tim_period;
|
31 | TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
32 | TimerBaseInitStructure.TIM_RepetitionCounter = 0;
|
33 | TIM_TimeBaseInit(TIM1, &TimerBaseInitStructure);
|
34 |
|
35 | /* Compare Register 1 konfigurieren */
|
36 |
|
37 | TimerOCInitStructure_1.TIM_OCMode = TIM_OCMode_PWM1;
|
38 | TimerOCInitStructure_1.TIM_OutputState = TIM_OutputState_Enable; // Nur Normal_State Pins aktvieren
|
39 | TimerOCInitStructure_1.TIM_OutputNState = TIM_OutputNState_Disable;
|
40 | TimerOCInitStructure_1.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
41 | TimerOCInitStructure_1.TIM_OCPolarity = TIM_OCPolarity_High;
|
42 | TimerOCInitStructure_1.TIM_Pulse = tim_period / 2;
|
43 |
|
44 | TIM_OC2Init(TIM1, &TimerOCInitStructure_1);
|
45 |
|
46 | /* Compare Register 2 konfigurieren */
|
47 | TimerOCInitStructure_2.TIM_OCMode = TIM_OCMode_PWM1;
|
48 | TimerOCInitStructure_2.TIM_OutputState = TIM_OutputState_Enable; // Nur Normal_State Pins aktvieren
|
49 | TimerOCInitStructure_2.TIM_OutputNState = TIM_OutputNState_Disable;
|
50 | TimerOCInitStructure_2.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
51 | TimerOCInitStructure_2.TIM_OCPolarity = TIM_OCPolarity_High;
|
52 | TimerOCInitStructure_2.TIM_Pulse = tim_period / 2;
|
53 |
|
54 | TIM_OC2Init(TIM1, &TimerOCInitStructure_2);
|
55 |
|
56 | /* Compare Register Preload */
|
57 | TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
|
58 | TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
|
59 |
|
60 | /* Compare Register INT de-aktivieren */
|
61 | TIM_ITConfig(TIM1,TIM_IT_CC1,DISABLE);
|
62 | TIM_ITConfig(TIM1,TIM_IT_CC2,DISABLE);
|
63 |
|
64 | /* Comapre Outputs aktivieren */
|
65 | TIM_CtrlPWMOutputs(TIM1, ENABLE);
|
66 |
|
67 | TIM_Cmd(TIM1, ENABLE);
|