STM32F4 ADC config

Gast #4852334
Lesenswert?

Hallo zusammen,

ich bekomme meinen SMT32F411RE leider nicht so configuriert, dass er den 
ADC-Wert an PC1 misst.

ich hoffe es kann jemand helfen...

_init_Hardware.c
1
SystemClock_Config(void)
2
{
3
    RCC_OscInitTypeDef RCC_OscInitStruct;
4
    RCC_ClkInitTypeDef RCC_ClkInitStruct;
5

6
    __HAL_RCC_PWR_CLK_ENABLE();
7

8
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
9

10
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
11
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
12
    RCC_OscInitStruct.HSICalibrationValue = 16;
13
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
14
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
15
    {
16
      Error_Handler();
17
    }
18

19
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
20
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
21
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
22
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
23
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
24
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
25
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
26
    {
27
      Error_Handler();
28
    }
29

30
    HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
31

32
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
33

34
    /* SysTick_IRQn interrupt configuration */
35
    HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
36
}
37

38
void ConfigureADC(ADC_HandleTypeDef g_AdcHandle)
39
{
40

41
   GPIO_InitTypeDef gpioInit;
42

43
      __GPIOC_CLK_ENABLE();
44
      __ADC1_CLK_ENABLE();
45

46
      gpioInit.Pin = GPIO_PIN_1;
47
      gpioInit.Mode = GPIO_MODE_ANALOG;
48
      gpioInit.Pull = GPIO_NOPULL;
49
      HAL_GPIO_Init(GPIOC, &gpioInit);
50

51
      HAL_NVIC_SetPriority(ADC_IRQn, 0, 0);
52
         HAL_NVIC_EnableIRQ(ADC_IRQn);
53

54
         ADC_ChannelConfTypeDef adcChannel;
55

56
         g_AdcHandle.Instance = ADC1;
57

58
         g_AdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2;
59
         g_AdcHandle.Init.Resolution = ADC_RESOLUTION_12B;
60
         g_AdcHandle.Init.ScanConvMode = DISABLE;
61
         g_AdcHandle.Init.ContinuousConvMode = ENABLE;
62
         g_AdcHandle.Init.DiscontinuousConvMode = DISABLE;
63
         g_AdcHandle.Init.NbrOfDiscConversion = 0;
64
         g_AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
65
         g_AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
66
         g_AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
67
         g_AdcHandle.Init.NbrOfConversion = 1;
68
         g_AdcHandle.Init.DMAContinuousRequests = ENABLE;
69
         g_AdcHandle.Init.EOCSelection = DISABLE;
70

71
         HAL_ADC_Init(&g_AdcHandle);
72

73
         adcChannel.Channel = ADC_CHANNEL_11;
74
         adcChannel.Rank = 1;
75
         adcChannel.SamplingTime = ADC_SAMPLETIME_480CYCLES;
76
         adcChannel.Offset = 0;
77

78
         if (HAL_ADC_ConfigChannel(&g_AdcHandle, &adcChannel) != HAL_OK)
79
         {
80
             asm("bkpt 255");
81
         }
82
}

main.c
1
int main(int argc, char* argv[])
2
{
3
  ADC_HandleTypeDef g_AdcHandle;
4
  g_ADCValue = 0;
5
... 
6
  ConfigureADC(&g_AdcHandle);
7
  HAL_ADC_Start(&g_AdcHandle);
8
while (1)
9
  {
10

11
    if (HAL_ADC_PollForConversion(&g_AdcHandle, 100) == HAL_OK)
12
    {
13
      g_ADCValue = HAL_ADC_GetValue(&g_AdcHandle);
14
      g_MeasurementNumber++;
15
    }
16
my_printf("ADC %u\r\n", g_ADCValue);
17
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren