Forum: Mikrocontroller und Digitale Elektronik STM32F4 ADC config


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von gulli (Gast)


Bewertung
0 lesenswert
nicht 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
}

von hp-freund (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Da fehlt aber noch etwas.

ADC_EXTERNALTRIGCONV_T1_CC1;
DMAContinuousRequests = ENABLE;

Wo wird Timer 1 eingestellt? Wo DMA?

Schau dir das in CubeMX an, dann wird vieles klarer.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.