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

Last change on this file was 29, checked in by f.jahn, 7 weeks ago
  • Auto Restart mode implementiert
  • IWDG implementiert
  • 24V Kompiler Version implementiert
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.