Guten Tag,
Habe ein Problem mit dem ADC auf meinem STM32F3 Nucleo Board. Zwar komme
ich einmal in meine
1 | void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
|
2 | {
|
3 | i = HAL_ADC_GetValue(AdcHandle);
|
4 | }
|
rein. Aber das wars dann auch. Meine adc_init() lautet:
1 | void adc_init (void)
|
2 | {
|
3 |
|
4 | ADC_ChannelConfTypeDef sConfig = {0};
|
5 |
|
6 | hadc1.Instance = ADC1;
|
7 | hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
|
8 | hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
9 | hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
|
10 | hadc1.Init.ContinuousConvMode = DISABLE;
|
11 | hadc1.Init.DiscontinuousConvMode = DISABLE;
|
12 | hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
|
13 | hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
|
14 | hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
|
15 | hadc1.Init.NbrOfConversion = 1;
|
16 | hadc1.Init.DMAContinuousRequests = DISABLE;
|
17 | hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
|
18 | hadc1.Init.LowPowerAutoWait = DISABLE;
|
19 | hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
|
20 |
|
21 | HAL_ADC_Init(&hadc1);
|
22 |
|
23 |
|
24 | sConfig.Channel = ADC_CHANNEL_1;
|
25 | sConfig.Rank = ADC_REGULAR_RANK_1;
|
26 | sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
27 | sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
|
28 | sConfig.OffsetNumber = ADC_OFFSET_NONE;
|
29 | sConfig.Offset = 0;
|
30 |
|
31 | HAL_ADC_ConfigChannel(&hadc1, &sConfig);
|
32 |
|
33 | HAL_ADC_Start_IT(&hadc1);
|
34 | HAL_NVIC_EnableIRQ(ADC1_IRQn);
|
35 | HAL_NVIC_SetPriority(ADC1_IRQn, 0, 0);
|
36 |
|
37 | }
|
Meine Vermutung wäre, dass das Conversation Complete Flag nicht gelöscht
wird und deshalb keine neue ausgeführt wird. Allerdings sollte die
HAL_ADC_GetValue dieses Flag löschen. Hat jemand eine Idee wieso ich nur
einmal reinkomme?