1 | #include "stm32f30x.h"
|
2 | #include "stm32f3_discovery.h"
|
3 | #include "main.h"
|
4 |
|
5 | void comp_init(void);
|
6 | void EXTI1_IRQHandler(void);
|
7 | void SysTick_Handler(void);
|
8 |
|
9 | uint32_t Timing = 0;
|
10 |
|
11 | int main(void)
|
12 | {
|
13 | // Quarz Einstellungen aktivieren
|
14 | SystemInit();
|
15 | SysTick_Config(SystemCoreClock/1000);
|
16 |
|
17 | STM_EVAL_LEDInit(LED3);
|
18 | STM_EVAL_LEDInit(LED4);
|
19 | STM_EVAL_LEDInit(LED5);
|
20 | STM_EVAL_LEDInit(LED9);
|
21 | STM_EVAL_LEDInit(LED10);
|
22 | STM_EVAL_LEDOn(LED3);
|
23 | STM_EVAL_LEDOn(LED4);
|
24 | STM_EVAL_LEDOn(LED5);
|
25 |
|
26 | comp_init();
|
27 |
|
28 | while(1)
|
29 | {
|
30 | //blank
|
31 | }
|
32 | }
|
33 |
|
34 | void comp_init(void)
|
35 | {
|
36 | GPIO_InitTypeDef GPIO_InitStructure;
|
37 | COMP_InitTypeDef COMP_InitStructure;
|
38 | EXTI_InitTypeDef EXTI_InitStructure;
|
39 | NVIC_InitTypeDef NVIC_InitStructure;
|
40 |
|
41 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
|
42 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE);
|
43 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
44 |
|
45 | //Konfiguration des GPIO => PA1 als Input des Comparators
|
46 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
|
47 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
48 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
49 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
50 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
51 |
|
52 | //Konfiguration des GPIO => PF4 als Output des Comparators
|
53 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
|
54 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
55 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
56 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
57 | GPIO_Init(GPIOF, &GPIO_InitStructure);
|
58 | GPIO_PinAFConfig(GPIOF, GPIO_PinSource4, GPIO_AF_2);
|
59 |
|
60 | //Konfiguration des Comp1
|
61 | COMP_InitStructure.COMP_InvertingInput = COMP_InvertingInput_VREFINT;
|
62 | COMP_InitStructure.COMP_NonInvertingInput = COMP_NonInvertingInput_IO1;
|
63 | COMP_InitStructure.COMP_Output = COMP_Output_None;
|
64 | COMP_InitStructure.COMP_BlankingSrce = COMP_BlankingSrce_None;
|
65 | COMP_InitStructure.COMP_OutputPol = COMP_OutputPol_NonInverted;
|
66 | COMP_InitStructure.COMP_Hysteresis = COMP_Hysteresis_No;
|
67 | COMP_InitStructure.COMP_Mode = COMP_Mode_HighSpeed;
|
68 | COMP_Init(COMP_Selection_COMP1, &COMP_InitStructure); // Enable COMP1 parameters
|
69 | COMP_Cmd(COMP_Selection_COMP1, ENABLE); // Enable COMP1
|
70 |
|
71 | SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1); //Connected EXTI Line to PA1 pin
|
72 |
|
73 | //Konfiguration des EXTI
|
74 | EXTI_InitStructure.EXTI_Line = EXTI_Line21; //Connected to the Comparator 1 event
|
75 | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
76 | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
77 | EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
78 | EXTI_Init(&EXTI_InitStructure);
|
79 |
|
80 | //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
|
81 |
|
82 | //Konfiguration des NVIC
|
83 | NVIC_InitStructure.NVIC_IRQChannel = COMP1_2_3_IRQn;
|
84 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
85 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
86 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
87 | NVIC_Init(&NVIC_InitStructure);
|
88 | }
|
89 |
|
90 | void COMP1_2_3_IRQHandler(void)
|
91 | {
|
92 | EXTI_ClearITPendingBit(EXTI_Line21);
|
93 | STM_EVAL_LEDToggle(LED10);
|
94 | }
|
95 |
|
96 |
|
97 | void SysTick_Handler(void)
|
98 | {
|
99 | Timing++;
|
100 | if(Timing == 500)
|
101 | {
|
102 | STM_EVAL_LEDToggle(LED9);
|
103 | Timing = 0;
|
104 | }
|
105 | }
|