1 | void Init(void)
|
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStructure;
|
4 | TIM_ICInitTypeDef TIM_ICInitStructure;
|
5 | NVIC_InitTypeDef NVIC_InitStructure;
|
6 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
7 |
|
8 | // Clock Enable
|
9 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
|
10 |
|
11 | // Clock enable
|
12 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
|
13 |
|
14 | // Config des Pins PA1 als AF-Input
|
15 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
|
16 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
17 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
|
18 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
19 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
20 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
21 |
|
22 | // Alternative-Funktion mit dem IO-Pin PA1 verbinden
|
23 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
|
24 |
|
25 | TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
|
26 | TIM_TimeBaseStructure.TIM_Prescaler = 0;
|
27 | TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
28 | TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
29 | TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
|
30 | TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
|
31 |
|
32 | // Vorteiler einstellen (Vorteiler von 167 => 1MHz)
|
33 | TIM_PrescalerConfig(TIM2, 0, TIM_PSCReloadMode_Immediate);
|
34 |
|
35 | // Channel 2
|
36 | TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
|
37 | TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
|
38 | TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
|
39 | TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
|
40 | TIM_ICInitStructure.TIM_ICFilter = 0x0;
|
41 | TIM_ICInit(TIM2, &TIM_ICInitStructure);
|
42 |
|
43 | // Timer enable
|
44 | TIM_Cmd(TIM2, ENABLE);
|
45 |
|
46 | NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
|
47 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
48 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
49 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
50 | NVIC_Init(&NVIC_InitStructure);
|
51 |
|
52 | //Interrupt Enable
|
53 | TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
|
54 | TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
|
55 | }
|
56 |
|
57 |
|
58 | //-----------------------
|
59 | // TIM2 Interrupt Handler
|
60 | //-----------------------
|
61 |
|
62 | void TIM2_IRQHandler(void)
|
63 | {
|
64 |
|
65 | // Überprüfen ob Overflow-Flag gesetzt wurde
|
66 | if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
|
67 | {
|
68 | // delete Interrupt Flags
|
69 | TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
|
70 | //Funktion
|
71 | }
|
72 | }
|
73 |
|
74 | // Überprüfung ob Capture-Flag gesetzt wurde
|
75 | if(TIM_GetITStatus(TIM2, TIM_IT_CC2) == SET)
|
76 | {
|
77 | // delete Interrupt Flags
|
78 | TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
|
79 | //Funktion
|
80 | }
|
81 | }
|