1 | volatile uint8_t beeps = 0;
|
2 |
|
3 | void BuzzerInit(void)
|
4 | {
|
5 | GPIO_InitTypeDef GPIO_InitStructure;
|
6 | TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
|
7 | TIM_OCInitTypeDef TIM_OC_InitStructure;
|
8 | NVIC_InitTypeDef NVIC_InitStructure;
|
9 |
|
10 | GPIO_InitStructure.GPIO_Pin = buzzerPin;
|
11 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
12 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
13 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
14 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
15 | GPIO_Init(buzzerPort, &GPIO_InitStructure);
|
16 |
|
17 | GPIO_PinAFConfig(buzzerPort, GPIO_PinSource7, GPIO_AF_TIM8);
|
18 |
|
19 | TIM_TimeBase_InitStructure.TIM_ClockDivision = 0;
|
20 | TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
21 | TIM_TimeBase_InitStructure.TIM_Prescaler = 41999; // 168.000.000 / 42.000 = 4000 (1s = 4000 Ticks)
|
22 | TIM_TimeBase_InitStructure.TIM_Period = 1599; // 1600 / 4000 = 0,4 (Überlauf nach 0,4 Sekunden)
|
23 | TIM_TimeBaseInit(TIM8, &TIM_TimeBase_InitStructure);
|
24 |
|
25 |
|
26 | TIM_OC_InitStructure.TIM_OCMode = TIM_OCMode_PWM2;
|
27 | TIM_OC_InitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
|
28 | TIM_OC_InitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;
|
29 | TIM_OC_InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
|
30 | TIM_OC_InitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
|
31 | TIM_OC_InitStructure.TIM_OutputState = TIM_OutputState_Enable;
|
32 | TIM_OC_InitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
|
33 | TIM_OC_InitStructure.TIM_Pulse = 1199; // Buzzer 0,1s an 0,3s aus
|
34 | TIM_OC2Init(TIM8, &TIM_OC_InitStructure); //Channel 2
|
35 |
|
36 | TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
|
37 | TIM_ARRPreloadConfig(TIM8, ENABLE);
|
38 |
|
39 | /* Main Output Enable */
|
40 | TIM_CtrlPWMOutputs(TIM8, ENABLE);
|
41 |
|
42 | /* Enable Timer-Update */
|
43 | TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE); //DIESE ZEILE ERZEUGT MEIN PROBLEM!!!!!
|
44 |
|
45 |
|
46 | /* TIM8 Update Interrupt */
|
47 | NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
|
48 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
49 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0E;
|
50 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0E;
|
51 | NVIC_Init(&NVIC_InitStructure);
|
52 |
|
53 | }
|
54 |
|
55 | void BuzzerBeep(uint8_t beeptimes)
|
56 | {
|
57 | beeps = beeptimes;
|
58 |
|
59 | /* TIM8 counter enable */
|
60 | TIM_Cmd(TIM8, ENABLE);
|
61 | }
|
62 |
|
63 | void TIM8_UP_TIM13_Handler(void)
|
64 | {
|
65 | //TIM_ClearFlag(TIM8, TIM_FLAG_Update);
|
66 | //TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
|
67 | LedYellowOn();
|
68 |
|
69 | if (beeps > 1)
|
70 | {
|
71 | beeps--;
|
72 | }
|
73 | else
|
74 | {
|
75 | beeps = 0;
|
76 | /* TIM8 counter disable */
|
77 | TIM_Cmd(TIM8, DISABLE);
|
78 | }
|
79 | }
|