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

Last change on this file was 20, checked in by f.jahn, 5 days ago

adc dma funktioniert und modbus funktioniert

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