Hallo,
ich habe hier einen STM32 und möchte gerne mit einem ADC zwei analoge
Spannungen abwechselnd einlesen, habe damit aber so meine Probleme.
Pins sind konfiguriert, ADC1 ist an und sampelt auch fleißig, leider ist
jeder zweite Wert eine 0. Deshalb gehe ich davon aus, dass meine
Einstellungen mit den zwei Channeln nicht ganz stimmen :(
Die analogen Signale liegen an ADC1 Channel 14 und 15.
Hier mein Code zum Konfigurieren und Starten des ADC1:
1 | /* ADC1 konfigurieren für PC4 und PC5*/
|
2 | /* ADC1 ist an APB2 und darf mit maximal 14MHz betrieben werden */
|
3 | RCC_ADCCLKConfig(RCC_PCLK2_Div4);
|
4 | /* Takt anlegen */
|
5 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
|
6 |
|
7 | ADC_InitTypeDef ADC_InitStructure;
|
8 | ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
|
9 | ADC_InitStructure.ADC_ScanConvMode = ENABLE;
|
10 | ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
|
11 | ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
|
12 | ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
|
13 | ADC_InitStructure.ADC_NbrOfChannel = 2;
|
14 | ADC_Init(ADC1, &ADC_InitStructure);
|
15 |
|
16 | /* PC4 ist Channel 14, PC5 ist Channel 15 */
|
17 | ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_55Cycles5);
|
18 | ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 2, ADC_SampleTime_55Cycles5);
|
19 |
|
20 | /* ADC1 aktivieren */
|
21 | ADC_Cmd(ADC1, ENABLE);
|
22 |
|
23 | /* ADC1 Kalibrieren */
|
24 | ADC_ResetCalibration(ADC1);
|
25 | while(ADC_GetResetCalibrationStatus(ADC1));
|
26 | ADC_StartCalibration(ADC1);
|
27 | while(ADC_GetCalibrationStatus(ADC1));
|
28 |
|
29 | ADC_SoftwareStartConvCmd(ADC1, ENABLE);
|
Ich stelle 2 Channel ein, der 14er bekommt Rank1, der andere Rank2.
Jetzt dachte ich, dass ich durch Ausführen der Befehle
X=ADC_GetConversionValue(ADC1);
Y=ADC_GetConversionValue(ADC1);
Meine beiden Spannungen eingelesen bekomme. Klappt aber nicht, wie
gesagt, jeder zweite Wert ist 0. Was mache ich falsch? Danke für eure
Hilfe!