source: trunk/firmware_v2/Core/Src/adc.c

Last change on this file was 17, checked in by f.jahn, 10 days ago
File size: 5.8 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file    adc.c
5  * @brief   This file provides code for the configuration
6  *          of the ADC instances.
7  ******************************************************************************
8  * @attention
9  *
10  * Copyright (c) 2025 STMicroelectronics.
11  * All rights reserved.
12  *
13  * This software is licensed under terms that can be found in the LICENSE file
14  * in the root directory of this software component.
15  * If no LICENSE file comes with this software, it is provided AS-IS.
16  *
17  ******************************************************************************
18  */
19/* USER CODE END Header */
20/* Includes ------------------------------------------------------------------*/
21#include "adc.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27ADC_HandleTypeDef hadc1;
28DMA_HandleTypeDef hdma_adc1;
29
30/* ADC1 init function */
31void MX_ADC1_Init(void)
32{
33
34  /* USER CODE BEGIN ADC1_Init 0 */
35
36  /* USER CODE END ADC1_Init 0 */
37
38  ADC_ChannelConfTypeDef sConfig = {0};
39
40  /* USER CODE BEGIN ADC1_Init 1 */
41
42  /* USER CODE END ADC1_Init 1 */
43
44  /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
45  */
46  hadc1.Instance = ADC1;
47  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
48  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
49  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
50  hadc1.Init.ScanConvMode = ADC_SCAN_SEQ_FIXED;
51  hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV;
52  hadc1.Init.LowPowerAutoWait = DISABLE;
53  hadc1.Init.LowPowerAutoPowerOff = DISABLE;
54  hadc1.Init.ContinuousConvMode = ENABLE;
55  hadc1.Init.NbrOfConversion = 1;
56  hadc1.Init.DiscontinuousConvMode = DISABLE;
57  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
58  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
59  hadc1.Init.DMAContinuousRequests = ENABLE;
60  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
61  hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
62  hadc1.Init.OversamplingMode = ENABLE;
63  hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
64  hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
65  hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
66  hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
67  if (HAL_ADC_Init(&hadc1) != HAL_OK)
68  {
69    Error_Handler();
70  }
71
72  /** Configure Regular Channel
73  */
74  sConfig.Channel = ADC_CHANNEL_2;
75  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
76  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
77  {
78    Error_Handler();
79  }
80
81  /** Configure Regular Channel
82  */
83  sConfig.Channel = ADC_CHANNEL_3;
84  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
85  {
86    Error_Handler();
87  }
88
89  /** Configure Regular Channel
90  */
91  sConfig.Channel = ADC_CHANNEL_4;
92  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
93  {
94    Error_Handler();
95  }
96
97  /** Configure Regular Channel
98  */
99  sConfig.Channel = ADC_CHANNEL_5;
100  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
101  {
102    Error_Handler();
103  }
104
105  /** Configure Regular Channel
106  */
107  sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
108  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
109  {
110    Error_Handler();
111  }
112  /* USER CODE BEGIN ADC1_Init 2 */
113
114  /* USER CODE END ADC1_Init 2 */
115
116}
117
118void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
119{
120
121  GPIO_InitTypeDef GPIO_InitStruct = {0};
122  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
123  if(adcHandle->Instance==ADC1)
124  {
125  /* USER CODE BEGIN ADC1_MspInit 0 */
126
127  /* USER CODE END ADC1_MspInit 0 */
128
129  /** Initializes the peripherals clocks
130  */
131    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
132    PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK;
133    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
134    {
135      Error_Handler();
136    }
137
138    /* ADC1 clock enable */
139    __HAL_RCC_ADC_CLK_ENABLE();
140
141    __HAL_RCC_GPIOA_CLK_ENABLE();
142    /**ADC1 GPIO Configuration
143    PA2     ------> ADC1_IN2
144    PA3     ------> ADC1_IN3
145    PA4     ------> ADC1_IN4
146    PA5     ------> ADC1_IN5
147    */
148    GPIO_InitStruct.Pin = ADC1_IN2_TEMP_SENSOR_Pin|ADC1_IN3_U_IN_Pin|ADC1_IN4_U_OUT_Pin|ADC1_IN5_RES1_Pin;
149    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
150    GPIO_InitStruct.Pull = GPIO_NOPULL;
151    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
152
153    /* ADC1 DMA Init */
154    /* ADC1 Init */
155    hdma_adc1.Instance = DMA1_Channel1;
156    hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
157    hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
158    hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
159    hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
160    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
161    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
162    hdma_adc1.Init.Mode = DMA_CIRCULAR;
163    hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
164    if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
165    {
166      Error_Handler();
167    }
168
169    __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
170
171  /* USER CODE BEGIN ADC1_MspInit 1 */
172
173  /* USER CODE END ADC1_MspInit 1 */
174  }
175}
176
177void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
178{
179
180  if(adcHandle->Instance==ADC1)
181  {
182  /* USER CODE BEGIN ADC1_MspDeInit 0 */
183
184  /* USER CODE END ADC1_MspDeInit 0 */
185    /* Peripheral clock disable */
186    __HAL_RCC_ADC_CLK_DISABLE();
187
188    /**ADC1 GPIO Configuration
189    PA2     ------> ADC1_IN2
190    PA3     ------> ADC1_IN3
191    PA4     ------> ADC1_IN4
192    PA5     ------> ADC1_IN5
193    */
194    HAL_GPIO_DeInit(GPIOA, ADC1_IN2_TEMP_SENSOR_Pin|ADC1_IN3_U_IN_Pin|ADC1_IN4_U_OUT_Pin|ADC1_IN5_RES1_Pin);
195
196    /* ADC1 DMA DeInit */
197    HAL_DMA_DeInit(adcHandle->DMA_Handle);
198  /* USER CODE BEGIN ADC1_MspDeInit 1 */
199
200  /* USER CODE END ADC1_MspDeInit 1 */
201  }
202}
203
204/* USER CODE BEGIN 1 */
205
206/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.