1 | #include "stm32f4xx.h"
|
2 | #include "stm32f4xx_adc.h"
|
3 | #include "stm32f4xx_gpio.h"
|
4 | #include "stm32f4xx_rcc.h"
|
5 |
|
6 |
|
7 | uint16_t ADCvalue = 0x00;
|
8 |
|
9 | int main()
|
10 | {
|
11 | SystemInit();
|
12 |
|
13 | /* RCC des GPIOB aktivieren */
|
14 | RCC_APB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
|
15 |
|
16 | /* ADC Kanäle Initialisieren */
|
17 | GPIO_InitTypeDef ADC1_ChannelsStruct;
|
18 |
|
19 | ADC1_ChannelsStruct.GPIO_Pin = GPIO_Pin_0; // GPIO Pin
|
20 | ADC1_ChannelsStruct.GPIO_Mode = GPIO_Mode_AIN; // Analoger Eingang
|
21 | ADC1_ChannelsStruct.GPIO_Speed = GPIO_Speed_100MHz; // Geschwindigkeit des Pins
|
22 | ADC1_ChannelsStruct.GPIO_OType = GPIO_OType_PP;
|
23 |
|
24 | GPIO_Init(GPIOB, &ADC1_ChannelsStruct);
|
25 |
|
26 | /* RCC des ADC1 aktivieren */
|
27 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
|
28 |
|
29 | /* ADC1 auf Standardwerte setzen */
|
30 | ADC_DeInit();
|
31 |
|
32 | /* ADC1 Initialisieren */
|
33 | ADC_InitTypeDef ADC1_InitStruct;
|
34 |
|
35 | ADC1_InitStruct.ADC_Resolution = ADC_Resolution_12b; // 12-Bit Auflösung
|
36 | ADC1_InitStruct.ADC_ScanConvMode = DISABLE; // Multichannel nutzen
|
37 | ADC1_InitStruct.ADC_ContinuousConvMode = DISABLE; // kontinuierlich Konvertieren
|
38 | ADC1_InitStruct.ADC_ExternalTrigConv = DISABLE; // Kein externer Trigger
|
39 | ADC1_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
|
40 | ADC1_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 12-Bit Rechts ausgerichtet
|
41 | ADC1_InitStruct.ADC_NbrOfConversion = 1; // 1 Kanal nutzen
|
42 |
|
43 | ADC_Init(ADC1, &ADC1_InitStruct);
|
44 |
|
45 | /* ADC Allgemein Initialisieren */
|
46 | ADC_CommonInitTypeDef ADC1_CommonStruct;
|
47 |
|
48 | ADC1_CommonStruct.ADC_Mode = ADC_Mode_Independent; // Kanal unabhängig messen
|
49 | ADC1_CommonStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; // DMA deaktivieren
|
50 | ADC1_CommonStruct.ADC_Prescaler = ADC_Prescaler_Div2; // Takt ist ADC SystemTakt / 2
|
51 | ADC1_CommonStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; // Wartet 5 Takte bis das Sampling beginnt
|
52 |
|
53 | ADC_CommonInit(&ADC1_CommonStruct);
|
54 |
|
55 | /* Konfiguriere das Abrufen von Kanal 8 */
|
56 | ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_144Cycles);
|
57 |
|
58 |
|
59 | /* Starte ADC1 */
|
60 | ADC_Cmd(ADC1, ENABLE);
|
61 |
|
62 |
|
63 | while (true)
|
64 | {
|
65 | /* Starte Umwandlungsprozess */
|
66 | ADC_SoftwareStartConv(ADC1);
|
67 |
|
68 | /* Warte bis der Prozess abschlossen wurde */
|
69 | while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
|
70 |
|
71 | /* Lösche End of Conversion-Flag */
|
72 | ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
|
73 |
|
74 | /* Rückgabe des Wertes */
|
75 | ADCvalue = ADC_GetConversionValue(ADC1);
|
76 |
|
77 |
|
78 | }
|
79 |
|
80 |
|
81 |
|
82 | }
|