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

Last change on this file was 26, checked in by f.jahn, 3 months ago
  • Bug in ADC Kalibrierung (STM32 ADC Strom) behoben
  • DMA Buffer für ADC 1 und ADC wird vor Überschreibung während bearbeitung geschützt, indem Datenübertragung nur einmalig erfolgt und erst nach Auswertung wieder gestartet wird
  • RS485Modbus: Timeout Zeit wird für Baudraten >19200 korrekt berechnet
  • Hardware ID geändert
  • Separates Register für "Batterie Empty detection mode" auf Adresse 92 angelegt
File size: 22.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;
28ADC_HandleTypeDef hadc2;
29ADC_HandleTypeDef hadc3;
30ADC_HandleTypeDef hadc4;
31ADC_HandleTypeDef hadc5;
32DMA_HandleTypeDef hdma_adc1;
33DMA_HandleTypeDef hdma_adc2;
34DMA_HandleTypeDef hdma_adc3;
35DMA_HandleTypeDef hdma_adc4;
36DMA_HandleTypeDef hdma_adc5;
37
38/* ADC1 init function */
39void MX_ADC1_Init(void)
40{
41
42 /* USER CODE BEGIN ADC1_Init 0 */
43
44 /* USER CODE END ADC1_Init 0 */
45
46 ADC_MultiModeTypeDef multimode = {0};
47 ADC_ChannelConfTypeDef sConfig = {0};
48
49 /* USER CODE BEGIN ADC1_Init 1 */
50
51 /* USER CODE END ADC1_Init 1 */
52
53 /** Common config
54 */
55 hadc1.Instance = ADC1;
56 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
57 hadc1.Init.Resolution = ADC_RESOLUTION_12B;
58 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
59 hadc1.Init.GainCompensation = 0;
60 hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
61 hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
62 hadc1.Init.LowPowerAutoWait = DISABLE;
63 hadc1.Init.ContinuousConvMode = ENABLE;
64 hadc1.Init.NbrOfConversion = 1;
65 hadc1.Init.DiscontinuousConvMode = DISABLE;
66 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
67 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
68 hadc1.Init.DMAContinuousRequests = DISABLE;
69 hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
70 hadc1.Init.OversamplingMode = ENABLE;
71 hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
72 hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
73 hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
74 hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
75 if (HAL_ADC_Init(&hadc1) != HAL_OK)
76 {
77 Error_Handler();
78 }
79
80 /** Configure the ADC multi-mode
81 */
82 multimode.Mode = ADC_DUALMODE_REGSIMULT;
83 multimode.DMAAccessMode = ADC_DMAACCESSMODE_12_10_BITS;
84 multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE;
85 if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
86 {
87 Error_Handler();
88 }
89
90 /** Configure Regular Channel
91 */
92 sConfig.Channel = ADC_CHANNEL_1;
93 sConfig.Rank = ADC_REGULAR_RANK_1;
94 sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
95 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
96 sConfig.OffsetNumber = ADC_OFFSET_NONE;
97 sConfig.Offset = 0;
98 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
99 {
100 Error_Handler();
101 }
102 /* USER CODE BEGIN ADC1_Init 2 */
103
104 /* USER CODE END ADC1_Init 2 */
105
106}
107/* ADC2 init function */
108void MX_ADC2_Init(void)
109{
110
111 /* USER CODE BEGIN ADC2_Init 0 */
112
113 /* USER CODE END ADC2_Init 0 */
114
115 ADC_ChannelConfTypeDef sConfig = {0};
116
117 /* USER CODE BEGIN ADC2_Init 1 */
118
119 /* USER CODE END ADC2_Init 1 */
120
121 /** Common config
122 */
123 hadc2.Instance = ADC2;
124 hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
125 hadc2.Init.Resolution = ADC_RESOLUTION_12B;
126 hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
127 hadc2.Init.GainCompensation = 0;
128 hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
129 hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
130 hadc2.Init.LowPowerAutoWait = DISABLE;
131 hadc2.Init.ContinuousConvMode = ENABLE;
132 hadc2.Init.NbrOfConversion = 1;
133 hadc2.Init.DiscontinuousConvMode = DISABLE;
134 hadc2.Init.DMAContinuousRequests = DISABLE;
135 hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
136 hadc2.Init.OversamplingMode = ENABLE;
137 hadc2.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
138 hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
139 hadc2.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
140 hadc2.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
141 if (HAL_ADC_Init(&hadc2) != HAL_OK)
142 {
143 Error_Handler();
144 }
145
146 /** Configure Regular Channel
147 */
148 sConfig.Channel = ADC_CHANNEL_3;
149 sConfig.Rank = ADC_REGULAR_RANK_1;
150 sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5;
151 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
152 sConfig.OffsetNumber = ADC_OFFSET_NONE;
153 sConfig.Offset = 0;
154 if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
155 {
156 Error_Handler();
157 }
158 /* USER CODE BEGIN ADC2_Init 2 */
159
160 /* USER CODE END ADC2_Init 2 */
161
162}
163/* ADC3 init function */
164void MX_ADC3_Init(void)
165{
166
167 /* USER CODE BEGIN ADC3_Init 0 */
168
169 /* USER CODE END ADC3_Init 0 */
170
171 ADC_MultiModeTypeDef multimode = {0};
172 ADC_ChannelConfTypeDef sConfig = {0};
173
174 /* USER CODE BEGIN ADC3_Init 1 */
175
176 /* USER CODE END ADC3_Init 1 */
177
178 /** Common config
179 */
180 hadc3.Instance = ADC3;
181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
182 hadc3.Init.Resolution = ADC_RESOLUTION_12B;
183 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
184 hadc3.Init.GainCompensation = 0;
185 hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE;
186 hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV;
187 hadc3.Init.LowPowerAutoWait = DISABLE;
188 hadc3.Init.ContinuousConvMode = ENABLE;
189 hadc3.Init.NbrOfConversion = 3;
190 hadc3.Init.DiscontinuousConvMode = DISABLE;
191 hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
192 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
193 hadc3.Init.DMAContinuousRequests = ENABLE;
194 hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
195 hadc3.Init.OversamplingMode = ENABLE;
196 hadc3.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
197 hadc3.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
198 hadc3.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
199 hadc3.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
200 if (HAL_ADC_Init(&hadc3) != HAL_OK)
201 {
202 Error_Handler();
203 }
204
205 /** Configure the ADC multi-mode
206 */
207 multimode.Mode = ADC_MODE_INDEPENDENT;
208 if (HAL_ADCEx_MultiModeConfigChannel(&hadc3, &multimode) != HAL_OK)
209 {
210 Error_Handler();
211 }
212
213 /** Configure Regular Channel
214 */
215 sConfig.Channel = ADC_CHANNEL_1;
216 sConfig.Rank = ADC_REGULAR_RANK_1;
217 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
218 sConfig.SingleDiff = ADC_SINGLE_ENDED;
219 sConfig.OffsetNumber = ADC_OFFSET_NONE;
220 sConfig.Offset = 0;
221 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
222 {
223 Error_Handler();
224 }
225
226 /** Configure Regular Channel
227 */
228 sConfig.Channel = ADC_CHANNEL_12;
229 sConfig.Rank = ADC_REGULAR_RANK_2;
230 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
231 {
232 Error_Handler();
233 }
234
235 /** Configure Regular Channel
236 */
237 sConfig.Channel = ADC_CHANNEL_5;
238 sConfig.Rank = ADC_REGULAR_RANK_3;
239 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
240 {
241 Error_Handler();
242 }
243 /* USER CODE BEGIN ADC3_Init 2 */
244
245 /* USER CODE END ADC3_Init 2 */
246
247}
248/* ADC4 init function */
249void MX_ADC4_Init(void)
250{
251
252 /* USER CODE BEGIN ADC4_Init 0 */
253
254 /* USER CODE END ADC4_Init 0 */
255
256 ADC_ChannelConfTypeDef sConfig = {0};
257
258 /* USER CODE BEGIN ADC4_Init 1 */
259
260 /* USER CODE END ADC4_Init 1 */
261
262 /** Common config
263 */
264 hadc4.Instance = ADC4;
265 hadc4.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
266 hadc4.Init.Resolution = ADC_RESOLUTION_12B;
267 hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT;
268 hadc4.Init.GainCompensation = 0;
269 hadc4.Init.ScanConvMode = ADC_SCAN_DISABLE;
270 hadc4.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
271 hadc4.Init.LowPowerAutoWait = DISABLE;
272 hadc4.Init.ContinuousConvMode = ENABLE;
273 hadc4.Init.NbrOfConversion = 1;
274 hadc4.Init.DiscontinuousConvMode = DISABLE;
275 hadc4.Init.ExternalTrigConv = ADC_SOFTWARE_START;
276 hadc4.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
277 hadc4.Init.DMAContinuousRequests = ENABLE;
278 hadc4.Init.Overrun = ADC_OVR_DATA_PRESERVED;
279 hadc4.Init.OversamplingMode = ENABLE;
280 hadc4.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
281 hadc4.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
282 hadc4.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
283 hadc4.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
284 if (HAL_ADC_Init(&hadc4) != HAL_OK)
285 {
286 Error_Handler();
287 }
288
289 /** Configure Regular Channel
290 */
291 sConfig.Channel = ADC_CHANNEL_4;
292 sConfig.Rank = ADC_REGULAR_RANK_1;
293 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
294 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
295 sConfig.OffsetNumber = ADC_OFFSET_NONE;
296 sConfig.Offset = 0;
297 if (HAL_ADC_ConfigChannel(&hadc4, &sConfig) != HAL_OK)
298 {
299 Error_Handler();
300 }
301 /* USER CODE BEGIN ADC4_Init 2 */
302
303 /* USER CODE END ADC4_Init 2 */
304
305}
306/* ADC5 init function */
307void MX_ADC5_Init(void)
308{
309
310 /* USER CODE BEGIN ADC5_Init 0 */
311
312 /* USER CODE END ADC5_Init 0 */
313
314 ADC_ChannelConfTypeDef sConfig = {0};
315
316 /* USER CODE BEGIN ADC5_Init 1 */
317
318 /* USER CODE END ADC5_Init 1 */
319
320 /** Common config
321 */
322 hadc5.Instance = ADC5;
323 hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
324 hadc5.Init.Resolution = ADC_RESOLUTION_12B;
325 hadc5.Init.DataAlign = ADC_DATAALIGN_RIGHT;
326 hadc5.Init.GainCompensation = 0;
327 hadc5.Init.ScanConvMode = ADC_SCAN_ENABLE;
328 hadc5.Init.EOCSelection = ADC_EOC_SEQ_CONV;
329 hadc5.Init.LowPowerAutoWait = DISABLE;
330 hadc5.Init.ContinuousConvMode = ENABLE;
331 hadc5.Init.NbrOfConversion = 4;
332 hadc5.Init.DiscontinuousConvMode = DISABLE;
333 hadc5.Init.ExternalTrigConv = ADC_SOFTWARE_START;
334 hadc5.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
335 hadc5.Init.DMAContinuousRequests = ENABLE;
336 hadc5.Init.Overrun = ADC_OVR_DATA_PRESERVED;
337 hadc5.Init.OversamplingMode = ENABLE;
338 hadc5.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256;
339 hadc5.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_4;
340 hadc5.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
341 hadc5.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
342 if (HAL_ADC_Init(&hadc5) != HAL_OK)
343 {
344 Error_Handler();
345 }
346
347 /** Configure Regular Channel
348 */
349 sConfig.Channel = ADC_CHANNEL_TEMPSENSOR_ADC5;
350 sConfig.Rank = ADC_REGULAR_RANK_1;
351 sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;
352 sConfig.SingleDiff = ADC_SINGLE_ENDED;
353 sConfig.OffsetNumber = ADC_OFFSET_NONE;
354 sConfig.Offset = 0;
355 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
356 {
357 Error_Handler();
358 }
359
360 /** Configure Regular Channel
361 */
362 sConfig.Channel = ADC_CHANNEL_VBAT;
363 sConfig.Rank = ADC_REGULAR_RANK_2;
364 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
365 {
366 Error_Handler();
367 }
368
369 /** Configure Regular Channel
370 */
371 sConfig.Channel = ADC_CHANNEL_2;
372 sConfig.Rank = ADC_REGULAR_RANK_3;
373 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
374 {
375 Error_Handler();
376 }
377
378 /** Configure Regular Channel
379 */
380 sConfig.Channel = ADC_CHANNEL_1;
381 sConfig.Rank = ADC_REGULAR_RANK_4;
382 if (HAL_ADC_ConfigChannel(&hadc5, &sConfig) != HAL_OK)
383 {
384 Error_Handler();
385 }
386 /* USER CODE BEGIN ADC5_Init 2 */
387
388 /* USER CODE END ADC5_Init 2 */
389
390}
391
392static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;
393static uint32_t HAL_RCC_ADC345_CLK_ENABLED=0;
394
395void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
396{
397
398 GPIO_InitTypeDef GPIO_InitStruct = {0};
399 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
400 if(adcHandle->Instance==ADC1)
401 {
402 /* USER CODE BEGIN ADC1_MspInit 0 */
403
404 /* USER CODE END ADC1_MspInit 0 */
405
406 /** Initializes the peripherals clocks
407 */
408 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
409 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL;
410 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
411 {
412 Error_Handler();
413 }
414
415 /* ADC1 clock enable */
416 HAL_RCC_ADC12_CLK_ENABLED++;
417 if(HAL_RCC_ADC12_CLK_ENABLED==1){
418 __HAL_RCC_ADC12_CLK_ENABLE();
419 }
420
421 __HAL_RCC_GPIOA_CLK_ENABLE();
422 /**ADC1 GPIO Configuration
423 PA0 ------> ADC1_IN1
424 PA1 ------> ADC1_IN2
425 */
426 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
427 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
428 GPIO_InitStruct.Pull = GPIO_NOPULL;
429 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
430
431 /* ADC1 DMA Init */
432 /* ADC1 Init */
433 hdma_adc1.Instance = DMA1_Channel1;
434 hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
435 hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
436 hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
437 hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
438 hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
439 hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
440 hdma_adc1.Init.Mode = DMA_NORMAL;
441 hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
442 if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
443 {
444 Error_Handler();
445 }
446
447 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
448
449 /* USER CODE BEGIN ADC1_MspInit 1 */
450
451 /* USER CODE END ADC1_MspInit 1 */
452 }
453 else if(adcHandle->Instance==ADC2)
454 {
455 /* USER CODE BEGIN ADC2_MspInit 0 */
456
457 /* USER CODE END ADC2_MspInit 0 */
458
459 /** Initializes the peripherals clocks
460 */
461 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
462 PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_PLL;
463 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
464 {
465 Error_Handler();
466 }
467
468 /* ADC2 clock enable */
469 HAL_RCC_ADC12_CLK_ENABLED++;
470 if(HAL_RCC_ADC12_CLK_ENABLED==1){
471 __HAL_RCC_ADC12_CLK_ENABLE();
472 }
473
474 __HAL_RCC_GPIOA_CLK_ENABLE();
475 /**ADC2 GPIO Configuration
476 PA6 ------> ADC2_IN3
477 PA7 ------> ADC2_IN4
478 */
479 GPIO_InitStruct.Pin = ADC2_IN3_UBAT__Pin|GPIO_PIN_7;
480 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
481 GPIO_InitStruct.Pull = GPIO_NOPULL;
482 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
483
484 /* ADC2 DMA Init */
485 /* ADC2 Init */
486 hdma_adc2.Instance = DMA1_Channel2;
487 hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
488 hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
489 hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
490 hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
491 hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
492 hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
493 hdma_adc2.Init.Mode = DMA_NORMAL;
494 hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
495 if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
496 {
497 Error_Handler();
498 }
499
500 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc2);
501
502 /* USER CODE BEGIN ADC2_MspInit 1 */
503
504 /* USER CODE END ADC2_MspInit 1 */
505 }
506 else if(adcHandle->Instance==ADC3)
507 {
508 /* USER CODE BEGIN ADC3_MspInit 0 */
509
510 /* USER CODE END ADC3_MspInit 0 */
511
512 /** Initializes the peripherals clocks
513 */
514 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
515 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
516 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
517 {
518 Error_Handler();
519 }
520
521 /* ADC3 clock enable */
522 HAL_RCC_ADC345_CLK_ENABLED++;
523 if(HAL_RCC_ADC345_CLK_ENABLED==1){
524 __HAL_RCC_ADC345_CLK_ENABLE();
525 }
526
527 __HAL_RCC_GPIOB_CLK_ENABLE();
528 /**ADC3 GPIO Configuration
529 PB0 ------> ADC3_IN12
530 PB1 ------> ADC3_IN1
531 PB13 ------> ADC3_IN5
532 */
533 GPIO_InitStruct.Pin = ADC3_IN12_MOSFET_TEMP_Pin|ADC3_IN1_SHUNT_TEMP_Pin|ADC3_IN5_RESERVIERT_Pin;
534 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
535 GPIO_InitStruct.Pull = GPIO_NOPULL;
536 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
537
538 /* ADC3 DMA Init */
539 /* ADC3 Init */
540 hdma_adc3.Instance = DMA1_Channel3;
541 hdma_adc3.Init.Request = DMA_REQUEST_ADC3;
542 hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY;
543 hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE;
544 hdma_adc3.Init.MemInc = DMA_MINC_ENABLE;
545 hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
546 hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
547 hdma_adc3.Init.Mode = DMA_CIRCULAR;
548 hdma_adc3.Init.Priority = DMA_PRIORITY_LOW;
549 if (HAL_DMA_Init(&hdma_adc3) != HAL_OK)
550 {
551 Error_Handler();
552 }
553
554 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc3);
555
556 /* USER CODE BEGIN ADC3_MspInit 1 */
557
558 /* USER CODE END ADC3_MspInit 1 */
559 }
560 else if(adcHandle->Instance==ADC4)
561 {
562 /* USER CODE BEGIN ADC4_MspInit 0 */
563
564 /* USER CODE END ADC4_MspInit 0 */
565
566 /** Initializes the peripherals clocks
567 */
568 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
569 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
570 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
571 {
572 Error_Handler();
573 }
574
575 /* ADC4 clock enable */
576 HAL_RCC_ADC345_CLK_ENABLED++;
577 if(HAL_RCC_ADC345_CLK_ENABLED==1){
578 __HAL_RCC_ADC345_CLK_ENABLE();
579 }
580
581 __HAL_RCC_GPIOB_CLK_ENABLE();
582 /**ADC4 GPIO Configuration
583 PB14 ------> ADC4_IN4
584 PB15 ------> ADC4_IN5
585 */
586 GPIO_InitStruct.Pin = ADC4_IN4_U_SHUNT_SENSE__Pin|ADC4_IN5_U_SHUNT_SENSE__Pin;
587 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
588 GPIO_InitStruct.Pull = GPIO_NOPULL;
589 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
590
591 /* ADC4 DMA Init */
592 /* ADC4 Init */
593 hdma_adc4.Instance = DMA1_Channel4;
594 hdma_adc4.Init.Request = DMA_REQUEST_ADC4;
595 hdma_adc4.Init.Direction = DMA_PERIPH_TO_MEMORY;
596 hdma_adc4.Init.PeriphInc = DMA_PINC_DISABLE;
597 hdma_adc4.Init.MemInc = DMA_MINC_ENABLE;
598 hdma_adc4.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
599 hdma_adc4.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
600 hdma_adc4.Init.Mode = DMA_CIRCULAR;
601 hdma_adc4.Init.Priority = DMA_PRIORITY_LOW;
602 if (HAL_DMA_Init(&hdma_adc4) != HAL_OK)
603 {
604 Error_Handler();
605 }
606
607 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc4);
608
609 /* USER CODE BEGIN ADC4_MspInit 1 */
610
611 /* USER CODE END ADC4_MspInit 1 */
612 }
613 else if(adcHandle->Instance==ADC5)
614 {
615 /* USER CODE BEGIN ADC5_MspInit 0 */
616
617 /* USER CODE END ADC5_MspInit 0 */
618
619 /** Initializes the peripherals clocks
620 */
621 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC345;
622 PeriphClkInit.Adc345ClockSelection = RCC_ADC345CLKSOURCE_PLL;
623 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
624 {
625 Error_Handler();
626 }
627
628 /* ADC5 clock enable */
629 HAL_RCC_ADC345_CLK_ENABLED++;
630 if(HAL_RCC_ADC345_CLK_ENABLED==1){
631 __HAL_RCC_ADC345_CLK_ENABLE();
632 }
633
634 __HAL_RCC_GPIOA_CLK_ENABLE();
635 /**ADC5 GPIO Configuration
636 PA8 ------> ADC5_IN1
637 PA9 ------> ADC5_IN2
638 */
639 GPIO_InitStruct.Pin = LVP_SENSE_Pin|OVP_SENSE_Pin;
640 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
641 GPIO_InitStruct.Pull = GPIO_NOPULL;
642 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
643
644 /* ADC5 DMA Init */
645 /* ADC5 Init */
646 hdma_adc5.Instance = DMA1_Channel5;
647 hdma_adc5.Init.Request = DMA_REQUEST_ADC5;
648 hdma_adc5.Init.Direction = DMA_PERIPH_TO_MEMORY;
649 hdma_adc5.Init.PeriphInc = DMA_PINC_DISABLE;
650 hdma_adc5.Init.MemInc = DMA_MINC_ENABLE;
651 hdma_adc5.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
652 hdma_adc5.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
653 hdma_adc5.Init.Mode = DMA_CIRCULAR;
654 hdma_adc5.Init.Priority = DMA_PRIORITY_LOW;
655 if (HAL_DMA_Init(&hdma_adc5) != HAL_OK)
656 {
657 Error_Handler();
658 }
659
660 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc5);
661
662 /* USER CODE BEGIN ADC5_MspInit 1 */
663
664 /* USER CODE END ADC5_MspInit 1 */
665 }
666}
667
668void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle)
669{
670
671 if(adcHandle->Instance==ADC1)
672 {
673 /* USER CODE BEGIN ADC1_MspDeInit 0 */
674
675 /* USER CODE END ADC1_MspDeInit 0 */
676 /* Peripheral clock disable */
677 HAL_RCC_ADC12_CLK_ENABLED--;
678 if(HAL_RCC_ADC12_CLK_ENABLED==0){
679 __HAL_RCC_ADC12_CLK_DISABLE();
680 }
681
682 /**ADC1 GPIO Configuration
683 PA0 ------> ADC1_IN1
684 PA1 ------> ADC1_IN2
685 */
686 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_0|GPIO_PIN_1);
687
688 /* ADC1 DMA DeInit */
689 HAL_DMA_DeInit(adcHandle->DMA_Handle);
690 /* USER CODE BEGIN ADC1_MspDeInit 1 */
691
692 /* USER CODE END ADC1_MspDeInit 1 */
693 }
694 else if(adcHandle->Instance==ADC2)
695 {
696 /* USER CODE BEGIN ADC2_MspDeInit 0 */
697
698 /* USER CODE END ADC2_MspDeInit 0 */
699 /* Peripheral clock disable */
700 HAL_RCC_ADC12_CLK_ENABLED--;
701 if(HAL_RCC_ADC12_CLK_ENABLED==0){
702 __HAL_RCC_ADC12_CLK_DISABLE();
703 }
704
705 /**ADC2 GPIO Configuration
706 PA6 ------> ADC2_IN3
707 PA7 ------> ADC2_IN4
708 */
709 HAL_GPIO_DeInit(GPIOA, ADC2_IN3_UBAT__Pin|GPIO_PIN_7);
710
711 /* ADC2 DMA DeInit */
712 HAL_DMA_DeInit(adcHandle->DMA_Handle);
713 /* USER CODE BEGIN ADC2_MspDeInit 1 */
714
715 /* USER CODE END ADC2_MspDeInit 1 */
716 }
717 else if(adcHandle->Instance==ADC3)
718 {
719 /* USER CODE BEGIN ADC3_MspDeInit 0 */
720
721 /* USER CODE END ADC3_MspDeInit 0 */
722 /* Peripheral clock disable */
723 HAL_RCC_ADC345_CLK_ENABLED--;
724 if(HAL_RCC_ADC345_CLK_ENABLED==0){
725 __HAL_RCC_ADC345_CLK_DISABLE();
726 }
727
728 /**ADC3 GPIO Configuration
729 PB0 ------> ADC3_IN12
730 PB1 ------> ADC3_IN1
731 PB13 ------> ADC3_IN5
732 */
733 HAL_GPIO_DeInit(GPIOB, ADC3_IN12_MOSFET_TEMP_Pin|ADC3_IN1_SHUNT_TEMP_Pin|ADC3_IN5_RESERVIERT_Pin);
734
735 /* ADC3 DMA DeInit */
736 HAL_DMA_DeInit(adcHandle->DMA_Handle);
737 /* USER CODE BEGIN ADC3_MspDeInit 1 */
738
739 /* USER CODE END ADC3_MspDeInit 1 */
740 }
741 else if(adcHandle->Instance==ADC4)
742 {
743 /* USER CODE BEGIN ADC4_MspDeInit 0 */
744
745 /* USER CODE END ADC4_MspDeInit 0 */
746 /* Peripheral clock disable */
747 HAL_RCC_ADC345_CLK_ENABLED--;
748 if(HAL_RCC_ADC345_CLK_ENABLED==0){
749 __HAL_RCC_ADC345_CLK_DISABLE();
750 }
751
752 /**ADC4 GPIO Configuration
753 PB14 ------> ADC4_IN4
754 PB15 ------> ADC4_IN5
755 */
756 HAL_GPIO_DeInit(GPIOB, ADC4_IN4_U_SHUNT_SENSE__Pin|ADC4_IN5_U_SHUNT_SENSE__Pin);
757
758 /* ADC4 DMA DeInit */
759 HAL_DMA_DeInit(adcHandle->DMA_Handle);
760 /* USER CODE BEGIN ADC4_MspDeInit 1 */
761
762 /* USER CODE END ADC4_MspDeInit 1 */
763 }
764 else if(adcHandle->Instance==ADC5)
765 {
766 /* USER CODE BEGIN ADC5_MspDeInit 0 */
767
768 /* USER CODE END ADC5_MspDeInit 0 */
769 /* Peripheral clock disable */
770 HAL_RCC_ADC345_CLK_ENABLED--;
771 if(HAL_RCC_ADC345_CLK_ENABLED==0){
772 __HAL_RCC_ADC345_CLK_DISABLE();
773 }
774
775 /**ADC5 GPIO Configuration
776 PA8 ------> ADC5_IN1
777 PA9 ------> ADC5_IN2
778 */
779 HAL_GPIO_DeInit(GPIOA, LVP_SENSE_Pin|OVP_SENSE_Pin);
780
781 /* ADC5 DMA DeInit */
782 HAL_DMA_DeInit(adcHandle->DMA_Handle);
783 /* USER CODE BEGIN ADC5_MspDeInit 1 */
784
785 /* USER CODE END ADC5_MspDeInit 1 */
786 }
787}
788
789/* USER CODE BEGIN 1 */
790
791/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.