Explorar el Código

PIN NAME 할당 / PIN 수정 필요 /

YJ hace 5 años
padre
commit
e37ac502df

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 187 - 187
.cproject


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2 - 2
.mxproject


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1003 - 0
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h


+ 710 - 0
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h

@@ -0,0 +1,710 @@
1
+/**
2
+  ******************************************************************************
3
+  * @file    stm32f1xx_hal_adc_ex.h
4
+  * @author  MCD Application Team
5
+  * @brief   Header file of ADC HAL extension module.
6
+  ******************************************************************************
7
+  * @attention
8
+  *
9
+  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
10
+  * All rights reserved.</center></h2>
11
+  *
12
+  * This software component is licensed by ST under BSD 3-Clause license,
13
+  * the "License"; You may not use this file except in compliance with the
14
+  * License. You may obtain a copy of the License at:
15
+  *                        opensource.org/licenses/BSD-3-Clause
16
+  *
17
+  ******************************************************************************
18
+  */
19
+
20
+/* Define to prevent recursive inclusion -------------------------------------*/
21
+#ifndef __STM32F1xx_HAL_ADC_EX_H
22
+#define __STM32F1xx_HAL_ADC_EX_H
23
+
24
+#ifdef __cplusplus
25
+ extern "C" {
26
+#endif
27
+
28
+/* Includes ------------------------------------------------------------------*/
29
+#include "stm32f1xx_hal_def.h"  
30
+
31
+/** @addtogroup STM32F1xx_HAL_Driver
32
+  * @{
33
+  */
34
+
35
+/** @addtogroup ADCEx
36
+  * @{
37
+  */ 
38
+
39
+/* Exported types ------------------------------------------------------------*/ 
40
+/** @defgroup ADCEx_Exported_Types ADCEx Exported Types
41
+  * @{
42
+  */
43
+
44
+/** 
45
+  * @brief  ADC Configuration injected Channel structure definition
46
+  * @note   Parameters of this structure are shared within 2 scopes:
47
+  *          - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset
48
+  *          - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode,
49
+  *            AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv.
50
+  * @note   The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state.
51
+  *         ADC state can be either:
52
+  *          - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ExternalTrigInjecConv')
53
+  *          - For all except parameters 'ExternalTrigInjecConv': ADC enabled without conversion on going on injected group.
54
+  */
55
+typedef struct 
56
+{
57
+  uint32_t InjectedChannel;                       /*!< Selection of ADC channel to configure
58
+                                                       This parameter can be a value of @ref ADC_channels
59
+                                                       Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.
60
+                                                       Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)
61
+                                                       Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with injection trigger.
62
+                                                             It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.
63
+                                                             Refer to errata sheet of these devices for more details. */
64
+  uint32_t InjectedRank;                          /*!< Rank in the injected group sequencer
65
+                                                       This parameter must be a value of @ref ADCEx_injected_rank
66
+                                                       Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions can be adjusted) */
67
+  uint32_t InjectedSamplingTime;                  /*!< Sampling time value to be set for the selected channel.
68
+                                                       Unit: ADC clock cycles
69
+                                                       Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).
70
+                                                       This parameter can be a value of @ref ADC_sampling_times
71
+                                                       Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.
72
+                                                                If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.
73
+                                                       Note: In case of usage of internal measurement channels (VrefInt/TempSensor),
74
+                                                             sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)
75
+                                                             Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */
76
+  uint32_t InjectedOffset;                        /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only).
77
+                                                       Offset value must be a positive number.
78
+                                                       Depending of ADC resolution selected (12, 10, 8 or 6 bits),
79
+                                                       this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */
80
+  uint32_t InjectedNbrOfConversion;               /*!< Specifies the number of ranks that will be converted within the injected group sequencer.
81
+                                                       To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.
82
+                                                       This parameter must be a number between Min_Data = 1 and Max_Data = 4.
83
+                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to
84
+                                                                configure a channel on injected group can impact the configuration of other channels previously set. */
85
+  FunctionalState InjectedDiscontinuousConvMode;  /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
86
+                                                       Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.
87
+                                                       Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.
88
+                                                       This parameter can be set to ENABLE or DISABLE.
89
+                                                       Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one.
90
+                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to
91
+                                                                configure a channel on injected group can impact the configuration of other channels previously set. */
92
+  FunctionalState AutoInjectedConv;               /*!< Enables or disables the selected ADC automatic injected group conversion after regular one
93
+                                                       This parameter can be set to ENABLE or DISABLE.
94
+                                                       Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE)
95
+                                                       Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START)
96
+                                                       Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete.
97
+                                                             To maintain JAUTO always enabled, DMA must be configured in circular mode.
98
+                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to
99
+                                                                configure a channel on injected group can impact the configuration of other channels previously set. */
100
+  uint32_t ExternalTrigInjecConv;                 /*!< Selects the external event used to trigger the conversion start of injected group.
101
+                                                       If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled.
102
+                                                       If set to external trigger source, triggering is on event rising edge.
103
+                                                       This parameter can be a value of @ref ADCEx_External_trigger_source_Injected
104
+                                                       Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion).
105
+                                                             If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on the fly)
106
+                                                       Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to
107
+                                                                configure a channel on injected group can impact the configuration of other channels previously set. */
108
+}ADC_InjectionConfTypeDef;
109
+
110
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
111
+/** 
112
+  * @brief  Structure definition of ADC multimode
113
+  * @note   The setting of these parameters with function HAL_ADCEx_MultiModeConfigChannel() is conditioned to ADCs state (both ADCs of the common group).
114
+  *         State of ADCs of the common group must be: disabled.
115
+  */
116
+typedef struct
117
+{
118
+  uint32_t Mode;              /*!< Configures the ADC to operate in independent or multi mode. 
119
+                                   This parameter can be a value of @ref ADCEx_Common_mode
120
+                                   Note: In dual mode, a change of channel configuration generates a restart that can produce a loss of synchronization. It is recommended to disable dual mode before any configuration change.
121
+                                   Note: In case of simultaneous mode used: Exactly the same sampling time should be configured for the 2 channels that will be sampled simultaneously by ACD1 and ADC2.
122
+                                   Note: In case of interleaved mode used: To avoid overlap between conversions, maximum sampling time allowed is 7 ADC clock cycles for fast interleaved mode and 14 ADC clock cycles for slow interleaved mode.
123
+                                   Note: Some multimode parameters are fixed on STM32F1 and can be configured on other STM32 devices with several ADC (multimode configuration structure can have additional parameters).
124
+                                         The equivalences are:
125
+                                           - Parameter 'DMAAccessMode': On STM32F1, this parameter is fixed to 1 DMA channel (one DMA channel for both ADC, DMA of ADC master). On other STM32 devices with several ADC, this is equivalent to parameter 'ADC_DMAACCESSMODE_12_10_BITS'.
126
+                                           - Parameter 'TwoSamplingDelay': On STM32F1, this parameter is fixed to 7 or 14 ADC clock cycles depending on fast or slow interleaved mode selected. On other STM32 devices with several ADC, this is equivalent to parameter 'ADC_TWOSAMPLINGDELAY_7CYCLES' (for fast interleaved mode). */
127
+
128
+  
129
+}ADC_MultiModeTypeDef;                                                          
130
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
131
+
132
+/**
133
+  * @}
134
+  */
135
+
136
+
137
+/* Exported constants --------------------------------------------------------*/
138
+   
139
+/** @defgroup ADCEx_Exported_Constants ADCEx Exported Constants
140
+  * @{
141
+  */
142
+
143
+/** @defgroup ADCEx_injected_rank ADCEx rank into injected group
144
+  * @{
145
+  */
146
+#define ADC_INJECTED_RANK_1                           0x00000001U
147
+#define ADC_INJECTED_RANK_2                           0x00000002U
148
+#define ADC_INJECTED_RANK_3                           0x00000003U
149
+#define ADC_INJECTED_RANK_4                           0x00000004U
150
+/**
151
+  * @}
152
+  */
153
+
154
+/** @defgroup ADCEx_External_trigger_edge_Injected ADCEx external trigger enable for injected group
155
+  * @{
156
+  */
157
+#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE           0x00000000U
158
+#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING         ((uint32_t)ADC_CR2_JEXTTRIG)
159
+/**
160
+  * @}
161
+  */
162
+    
163
+/** @defgroup ADC_External_trigger_source_Regular ADC External trigger selection for regular group
164
+  * @{
165
+  */
166
+/*!< List of external triggers with generic trigger name, independently of    */
167
+/* ADC target, sorted by trigger name:                                        */
168
+
169
+/*!< External triggers of regular group for ADC1&ADC2 only */
170
+#define ADC_EXTERNALTRIGCONV_T1_CC1         ADC1_2_EXTERNALTRIG_T1_CC1
171
+#define ADC_EXTERNALTRIGCONV_T1_CC2         ADC1_2_EXTERNALTRIG_T1_CC2
172
+#define ADC_EXTERNALTRIGCONV_T2_CC2         ADC1_2_EXTERNALTRIG_T2_CC2
173
+#define ADC_EXTERNALTRIGCONV_T3_TRGO        ADC1_2_EXTERNALTRIG_T3_TRGO
174
+#define ADC_EXTERNALTRIGCONV_T4_CC4         ADC1_2_EXTERNALTRIG_T4_CC4
175
+#define ADC_EXTERNALTRIGCONV_EXT_IT11       ADC1_2_EXTERNALTRIG_EXT_IT11
176
+
177
+#if defined (STM32F103xE) || defined (STM32F103xG)
178
+/*!< External triggers of regular group for ADC3 only */
179
+#define ADC_EXTERNALTRIGCONV_T2_CC3         ADC3_EXTERNALTRIG_T2_CC3
180
+#define ADC_EXTERNALTRIGCONV_T3_CC1         ADC3_EXTERNALTRIG_T3_CC1
181
+#define ADC_EXTERNALTRIGCONV_T5_CC1         ADC3_EXTERNALTRIG_T5_CC1
182
+#define ADC_EXTERNALTRIGCONV_T5_CC3         ADC3_EXTERNALTRIG_T5_CC3
183
+#define ADC_EXTERNALTRIGCONV_T8_CC1         ADC3_EXTERNALTRIG_T8_CC1
184
+#endif /* STM32F103xE || defined STM32F103xG */
185
+
186
+/*!< External triggers of regular group for all ADC instances */
187
+#define ADC_EXTERNALTRIGCONV_T1_CC3         ADC1_2_3_EXTERNALTRIG_T1_CC3
188
+
189
+#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC)
190
+/*!< Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and   */
191
+/*         XL-density devices.                                                */
192
+/*         To use it on ADC or ADC2, a remap of trigger must be done from     */
193
+/*         EXTI line 11 to TIM8_TRGO with macro:                              */
194
+/*           __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE()                           */
195
+/*           __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE()                           */
196
+
197
+/* Note for internal constant value management: If TIM8_TRGO is available,    */
198
+/* its definition is set to value for ADC1&ADC2 by default and changed to     */
199
+/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */
200
+#define ADC_EXTERNALTRIGCONV_T8_TRGO        ADC1_2_EXTERNALTRIG_T8_TRGO
201
+#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
202
+
203
+#define ADC_SOFTWARE_START                  ADC1_2_3_SWSTART
204
+/**
205
+  * @}
206
+  */
207
+
208
+/** @defgroup ADCEx_External_trigger_source_Injected ADCEx External trigger selection for injected group
209
+  * @{
210
+  */
211
+/*!< List of external triggers with generic trigger name, independently of    */
212
+/* ADC target, sorted by trigger name:                                        */
213
+
214
+/*!< External triggers of injected group for ADC1&ADC2 only */
215
+#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO        ADC1_2_EXTERNALTRIGINJEC_T2_TRGO
216
+#define ADC_EXTERNALTRIGINJECCONV_T2_CC1         ADC1_2_EXTERNALTRIGINJEC_T2_CC1
217
+#define ADC_EXTERNALTRIGINJECCONV_T3_CC4         ADC1_2_EXTERNALTRIGINJEC_T3_CC4
218
+#define ADC_EXTERNALTRIGINJECCONV_T4_TRGO        ADC1_2_EXTERNALTRIGINJEC_T4_TRGO 
219
+#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15       ADC1_2_EXTERNALTRIGINJEC_EXT_IT15
220
+
221
+#if defined (STM32F103xE) || defined (STM32F103xG)
222
+/*!< External triggers of injected group for ADC3 only */
223
+#define ADC_EXTERNALTRIGINJECCONV_T4_CC3         ADC3_EXTERNALTRIGINJEC_T4_CC3
224
+#define ADC_EXTERNALTRIGINJECCONV_T8_CC2         ADC3_EXTERNALTRIGINJEC_T8_CC2
225
+#define ADC_EXTERNALTRIGINJECCONV_T5_TRGO        ADC3_EXTERNALTRIGINJEC_T5_TRGO
226
+#define ADC_EXTERNALTRIGINJECCONV_T5_CC4         ADC3_EXTERNALTRIGINJEC_T5_CC4
227
+#endif /* STM32F103xE || defined STM32F103xG */
228
+
229
+/*!< External triggers of injected group for all ADC instances */
230
+#define ADC_EXTERNALTRIGINJECCONV_T1_CC4         ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4
231
+#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO        ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO
232
+
233
+#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG) || defined (STM32F105xC) || defined (STM32F107xC)
234
+/*!< Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and    */
235
+/*         XL-density devices.                                                */
236
+/*         To use it on ADC1 or ADC2, a remap of trigger must be done from    */
237
+/*         EXTI line 11 to TIM8_CC4 with macro:                               */
238
+/*           __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE()                           */
239
+/*           __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE()                           */
240
+
241
+/* Note for internal constant value management: If TIM8_CC4 is available,     */
242
+/* its definition is set to value for ADC1&ADC2 by default and changed to     */
243
+/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */
244
+#define ADC_EXTERNALTRIGINJECCONV_T8_CC4         ADC1_2_EXTERNALTRIGINJEC_T8_CC4
245
+#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */
246
+
247
+#define ADC_INJECTED_SOFTWARE_START              ADC1_2_3_JSWSTART
248
+/**
249
+  * @}
250
+  */
251
+
252
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
253
+/** @defgroup ADCEx_Common_mode ADC Extended Dual ADC Mode
254
+  * @{
255
+  */
256
+#define ADC_MODE_INDEPENDENT                              0x00000000U                                                                     /*!< ADC dual mode disabled (ADC independent mode) */
257
+#define ADC_DUALMODE_REGSIMULT_INJECSIMULT    ((uint32_t)(                                                            ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined regular simultaneous + injected simultaneous mode, on groups regular and injected */
258
+#define ADC_DUALMODE_REGSIMULT_ALTERTRIG      ((uint32_t)(                                        ADC_CR1_DUALMOD_1                    )) /*!< ADC dual mode enabled: Combined regular simultaneous + alternate trigger mode, on groups regular and injected */
259
+#define ADC_DUALMODE_INJECSIMULT_INTERLFAST   ((uint32_t)(                                        ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined injected simultaneous + fast interleaved mode, on groups regular and injected (delay between ADC sampling phases: 7 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */
260
+#define ADC_DUALMODE_INJECSIMULT_INTERLSLOW   ((uint32_t)(                    ADC_CR1_DUALMOD_2                                        )) /*!< ADC dual mode enabled: Combined injected simultaneous + slow Interleaved mode, on groups regular and injected (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */
261
+#define ADC_DUALMODE_INJECSIMULT              ((uint32_t)(                    ADC_CR1_DUALMOD_2 |                     ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Injected simultaneous mode, on group injected */
262
+#define ADC_DUALMODE_REGSIMULT                ((uint32_t)(                    ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1                    )) /*!< ADC dual mode enabled: Regular simultaneous mode, on group regular */
263
+#define ADC_DUALMODE_INTERLFAST               ((uint32_t)(                    ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Fast interleaved mode, on group regular (delay between ADC sampling phases: 7 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */
264
+#define ADC_DUALMODE_INTERLSLOW               ((uint32_t)(ADC_CR1_DUALMOD_3                                                            )) /*!< ADC dual mode enabled: Slow interleaved mode, on group regular (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter "TwoSamplingDelay" set to "ADC_TWOSAMPLINGDELAY_7CYCLES" on other STM32 devices)) */
265
+#define ADC_DUALMODE_ALTERTRIG                ((uint32_t)(ADC_CR1_DUALMOD_3 |                                         ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Alternate trigger mode, on group injected */
266
+/**
267
+  * @}
268
+  */
269
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
270
+
271
+/**
272
+  * @}
273
+  */
274
+
275
+
276
+/* Private constants ---------------------------------------------------------*/
277
+
278
+/** @addtogroup ADCEx_Private_Constants ADCEx Private Constants
279
+  * @{
280
+  */
281
+
282
+/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Regular ADC Extended Internal HAL driver trigger selection for regular group
283
+  * @{
284
+  */
285
+/* List of external triggers of regular group for ADC1, ADC2, ADC3 (if ADC    */
286
+/* instance is available on the selected device).                             */
287
+/* (used internally by HAL driver. To not use into HAL structure parameters)  */
288
+
289
+/* External triggers of regular group for ADC1&ADC2 (if ADCx available) */
290
+#define ADC1_2_EXTERNALTRIG_T1_CC1                       0x00000000U
291
+#define ADC1_2_EXTERNALTRIG_T1_CC2           ((uint32_t)(                                      ADC_CR2_EXTSEL_0))
292
+#define ADC1_2_EXTERNALTRIG_T2_CC2           ((uint32_t)(                   ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
293
+#define ADC1_2_EXTERNALTRIG_T3_TRGO          ((uint32_t)(ADC_CR2_EXTSEL_2                                      ))
294
+#define ADC1_2_EXTERNALTRIG_T4_CC4           ((uint32_t)(ADC_CR2_EXTSEL_2 |                    ADC_CR2_EXTSEL_0))
295
+#define ADC1_2_EXTERNALTRIG_EXT_IT11         ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1                   ))
296
+#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG)
297
+/* Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and     */
298
+/* XL-density devices.                                                        */
299
+#define ADC1_2_EXTERNALTRIG_T8_TRGO          ADC1_2_EXTERNALTRIG_EXT_IT11
300
+#endif
301
+
302
+#if defined (STM32F103xE) || defined (STM32F103xG)
303
+/* External triggers of regular group for ADC3 */
304
+#define ADC3_EXTERNALTRIG_T3_CC1             ADC1_2_EXTERNALTRIG_T1_CC1
305
+#define ADC3_EXTERNALTRIG_T2_CC3             ADC1_2_EXTERNALTRIG_T1_CC2
306
+#define ADC3_EXTERNALTRIG_T8_CC1             ADC1_2_EXTERNALTRIG_T2_CC2
307
+#define ADC3_EXTERNALTRIG_T8_TRGO            ADC1_2_EXTERNALTRIG_T3_TRGO
308
+#define ADC3_EXTERNALTRIG_T5_CC1             ADC1_2_EXTERNALTRIG_T4_CC4
309
+#define ADC3_EXTERNALTRIG_T5_CC3             ADC1_2_EXTERNALTRIG_EXT_IT11
310
+#endif
311
+
312
+/* External triggers of regular group for ADC1&ADC2&ADC3 (if ADCx available) */
313
+#define ADC1_2_3_EXTERNALTRIG_T1_CC3         ((uint32_t)(                   ADC_CR2_EXTSEL_1                   ))
314
+#define ADC1_2_3_SWSTART                     ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
315
+/**
316
+  * @}
317
+  */
318
+
319
+/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Injected ADC Extended Internal HAL driver trigger selection for injected group
320
+  * @{
321
+  */
322
+/* List of external triggers of injected group for ADC1, ADC2, ADC3 (if ADC    */
323
+/* instance is available on the selected device).                             */
324
+/* (used internally by HAL driver. To not use into HAL structure parameters)  */
325
+
326
+/* External triggers of injected group for ADC1&ADC2 (if ADCx available) */
327
+#define ADC1_2_EXTERNALTRIGINJEC_T2_TRGO          ((uint32_t)(                    ADC_CR2_JEXTSEL_1                    ))
328
+#define ADC1_2_EXTERNALTRIGINJEC_T2_CC1           ((uint32_t)(                    ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))
329
+#define ADC1_2_EXTERNALTRIGINJEC_T3_CC4           ((uint32_t)(ADC_CR2_JEXTSEL_2                                        ))
330
+#define ADC1_2_EXTERNALTRIGINJEC_T4_TRGO          ((uint32_t)(ADC_CR2_JEXTSEL_2 |                     ADC_CR2_JEXTSEL_0))
331
+#define ADC1_2_EXTERNALTRIGINJEC_EXT_IT15         ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1                    ))
332
+#if defined (STM32F101xE) || defined (STM32F103xE) || defined (STM32F103xG)
333
+/* Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and      */
334
+/* XL-density devices.                                                        */
335
+#define ADC1_2_EXTERNALTRIGINJEC_T8_CC4           ADC1_2_EXTERNALTRIGINJEC_EXT_IT15
336
+#endif
337
+
338
+#if defined (STM32F103xE) || defined (STM32F103xG)
339
+/* External triggers of injected group for ADC3 */
340
+#define ADC3_EXTERNALTRIGINJEC_T4_CC3             ADC1_2_EXTERNALTRIGINJEC_T2_TRGO
341
+#define ADC3_EXTERNALTRIGINJEC_T8_CC2             ADC1_2_EXTERNALTRIGINJEC_T2_CC1
342
+#define ADC3_EXTERNALTRIGINJEC_T8_CC4             ADC1_2_EXTERNALTRIGINJEC_T3_CC4
343
+#define ADC3_EXTERNALTRIGINJEC_T5_TRGO            ADC1_2_EXTERNALTRIGINJEC_T4_TRGO
344
+#define ADC3_EXTERNALTRIGINJEC_T5_CC4             ADC1_2_EXTERNALTRIGINJEC_EXT_IT15
345
+#endif /* STM32F103xE || defined STM32F103xG */
346
+
347
+/* External triggers of injected group for ADC1&ADC2&ADC3 (if ADCx available) */
348
+#define ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO                    0x00000000U
349
+#define ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4         ((uint32_t)(                                        ADC_CR2_JEXTSEL_0))
350
+#define ADC1_2_3_JSWSTART                         ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))
351
+/**
352
+  * @}
353
+  */
354
+
355
+/**
356
+  * @}
357
+  */
358
+
359
+
360
+/* Exported macro ------------------------------------------------------------*/
361
+
362
+/* Private macro -------------------------------------------------------------*/
363
+
364
+/** @defgroup ADCEx_Private_Macro ADCEx Private Macro
365
+  * @{
366
+  */
367
+/* Macro reserved for internal HAL driver usage, not intended to be used in   */
368
+/* code of final user.                                                        */
369
+
370
+    
371
+/**
372
+  * @brief For devices with 3 ADCs: Defines the external trigger source 
373
+  *        for regular group according to ADC into common group ADC1&ADC2 or 
374
+  *        ADC3 (some triggers with same source have different value to
375
+  *        be programmed into ADC EXTSEL bits of CR2 register).
376
+  *        For devices with 2 ADCs or less: this macro makes no change.
377
+  * @param __HANDLE__: ADC handle
378
+  * @param __EXT_TRIG_CONV__: External trigger selected for regular group.
379
+  * @retval External trigger to be programmed into EXTSEL bits of CR2 register
380
+  */
381
+#if defined (STM32F103xE) || defined (STM32F103xG)
382
+#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__)                         \
383
+ (( (((__HANDLE__)->Instance) == ADC3)                                         \
384
+  )?                                                                           \
385
+   ( ( (__EXT_TRIG_CONV__) == ADC_EXTERNALTRIGCONV_T8_TRGO                     \
386
+     )?                                                                        \
387
+      (ADC3_EXTERNALTRIG_T8_TRGO)                                              \
388
+      :                                                                        \
389
+      (__EXT_TRIG_CONV__)                                                      \
390
+   )                                                                           \
391
+   :                                                                           \
392
+   (__EXT_TRIG_CONV__)                                                         \
393
+ )
394
+#else
395
+#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__)                         \
396
+  (__EXT_TRIG_CONV__)
397
+#endif /* STM32F103xE || STM32F103xG */
398
+
399
+/**
400
+  * @brief For devices with 3 ADCs: Defines the external trigger source 
401
+  *        for injected group according to ADC into common group ADC1&ADC2 or 
402
+  *        ADC3 (some triggers with same source have different value to
403
+  *        be programmed into ADC JEXTSEL bits of CR2 register).
404
+  *        For devices with 2 ADCs or less: this macro makes no change.
405
+  * @param __HANDLE__: ADC handle
406
+  * @param __EXT_TRIG_INJECTCONV__: External trigger selected for injected group.
407
+  * @retval External trigger to be programmed into JEXTSEL bits of CR2 register
408
+  */
409
+#if defined (STM32F103xE) || defined (STM32F103xG)
410
+#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__)                  \
411
+ (( (((__HANDLE__)->Instance) == ADC3)                                         \
412
+  )?                                                                           \
413
+   ( ( (__EXT_TRIG_INJECTCONV__) == ADC_EXTERNALTRIGINJECCONV_T8_CC4           \
414
+     )?                                                                        \
415
+      (ADC3_EXTERNALTRIGINJEC_T8_CC4)                                          \
416
+      :                                                                        \
417
+      (__EXT_TRIG_INJECTCONV__)                                                \
418
+   )                                                                           \
419
+   :                                                                           \
420
+   (__EXT_TRIG_INJECTCONV__)                                                   \
421
+ )
422
+#else
423
+#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__)                  \
424
+   (__EXT_TRIG_INJECTCONV__)
425
+#endif /* STM32F103xE || STM32F103xG */
426
+
427
+
428
+/**
429
+  * @brief Verification if multimode is enabled for the selected ADC (multimode ADC master or ADC slave) (applicable for devices with several ADCs)
430
+  * @param __HANDLE__: ADC handle
431
+  * @retval Multimode state: RESET if multimode is disabled, other value if multimode is enabled
432
+  */
433
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
434
+#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__)                                    \
435
+ (( (((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)   \
436
+  )?                                                                           \
437
+   (ADC1->CR1 & ADC_CR1_DUALMOD)                                               \
438
+   :                                                                           \
439
+   (RESET)                                                                     \
440
+ )
441
+#else
442
+#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__)                                    \
443
+  (RESET)
444
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
445
+
446
+/**
447
+  * @brief Verification of condition for ADC start conversion: ADC must be in non-multimode, or multimode with handle of ADC master (applicable for devices with several ADCs)
448
+  * @param __HANDLE__: ADC handle
449
+  * @retval None
450
+  */
451
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
452
+#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__)                        \
453
+  (( (((__HANDLE__)->Instance) == ADC2)                                        \
454
+   )?                                                                          \
455
+    ((ADC1->CR1 & ADC_CR1_DUALMOD) == RESET)                                   \
456
+    :                                                                          \
457
+    (!RESET)                                                                   \
458
+  )
459
+#else
460
+#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__)                        \
461
+  (!RESET)
462
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
463
+
464
+/**
465
+  * @brief Check ADC multimode setting: In case of multimode, check whether ADC master of the selected ADC has feature auto-injection enabled (applicable for devices with several ADCs)
466
+  * @param __HANDLE__: ADC handle
467
+  * @retval None
468
+  */
469
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
470
+#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__)                                \
471
+  (( (((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)  \
472
+   )?                                                                          \
473
+    (ADC1->CR1 & ADC_CR1_JAUTO)                                                \
474
+    :                                                                          \
475
+    (RESET)                                                                    \
476
+  )
477
+#else
478
+#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__)                                \
479
+  (RESET)
480
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
481
+
482
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
483
+/**
484
+  * @brief Set handle of the other ADC sharing the common multimode settings
485
+  * @param __HANDLE__: ADC handle
486
+  * @param __HANDLE_OTHER_ADC__: other ADC handle
487
+  * @retval None
488
+  */
489
+#define ADC_COMMON_ADC_OTHER(__HANDLE__, __HANDLE_OTHER_ADC__)                 \
490
+  ((__HANDLE_OTHER_ADC__)->Instance = ADC2)
491
+
492
+/**
493
+  * @brief Set handle of the ADC slave associated to the ADC master
494
+  * On STM32F1 devices, ADC slave is always ADC2 (this can be different
495
+  * on other STM32 devices)
496
+  * @param __HANDLE_MASTER__: ADC master handle
497
+  * @param __HANDLE_SLAVE__: ADC slave handle
498
+  * @retval None
499
+  */
500
+#define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__)                   \
501
+  ((__HANDLE_SLAVE__)->Instance = ADC2)
502
+       
503
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
504
+
505
+#define IS_ADC_INJECTED_RANK(CHANNEL) (((CHANNEL) == ADC_INJECTED_RANK_1) || \
506
+                                       ((CHANNEL) == ADC_INJECTED_RANK_2) || \
507
+                                       ((CHANNEL) == ADC_INJECTED_RANK_3) || \
508
+                                       ((CHANNEL) == ADC_INJECTED_RANK_4))
509
+
510
+#define IS_ADC_EXTTRIGINJEC_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE)  || \
511
+                                        ((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISING))
512
+
513
+/** @defgroup ADCEx_injected_nb_conv_verification ADCEx injected nb conv verification
514
+  * @{
515
+  */
516
+#define IS_ADC_INJECTED_NB_CONV(LENGTH)  (((LENGTH) >= 1U) && ((LENGTH) <= 4U))
517
+/**
518
+  * @}
519
+  */
520
+
521
+#if defined (STM32F100xB) || defined (STM32F100xE) || defined (STM32F101x6) || defined (STM32F101xB) || defined (STM32F102x6) || defined (STM32F102xB) || defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC)
522
+#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1)    || \
523
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2)    || \
524
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2)    || \
525
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)   || \
526
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4)    || \
527
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11)  || \
528
+                                 ((REGTRIG) == ADC_SOFTWARE_START))
529
+#endif
530
+#if defined (STM32F101xE)
531
+#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1)    || \
532
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2)    || \
533
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2)    || \
534
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)   || \
535
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4)    || \
536
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11)  || \
537
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO)   || \
538
+                                 ((REGTRIG) == ADC_SOFTWARE_START))
539
+#endif
540
+#if defined (STM32F101xG)
541
+#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1)    || \
542
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2)    || \
543
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2)    || \
544
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)   || \
545
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4)    || \
546
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11)  || \
547
+                                 ((REGTRIG) == ADC_SOFTWARE_START))
548
+#endif
549
+#if defined (STM32F103xE) || defined (STM32F103xG)
550
+#define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1)    || \
551
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2)    || \
552
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2)    || \
553
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)   || \
554
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4)    || \
555
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11)  || \
556
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1)    || \
557
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3)    || \
558
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1)    || \
559
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1)    || \
560
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3)    || \
561
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3)    || \
562
+                                 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO)   || \
563
+                                 ((REGTRIG) == ADC_SOFTWARE_START))
564
+#endif
565
+
566
+#if defined (STM32F100xB) || defined (STM32F100xE) || defined (STM32F101x6) || defined (STM32F101xB) || defined (STM32F102x6) || defined (STM32F102xB) || defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC)
567
+#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO)  || \
568
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1)   || \
569
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)   || \
570
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO)  || \
571
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \
572
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4)   || \
573
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)  || \
574
+                                      ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))
575
+#endif
576
+#if defined (STM32F101xE)
577
+#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO)  || \
578
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1)   || \
579
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)   || \
580
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO)  || \
581
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \
582
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4)   || \
583
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)  || \
584
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4)   || \
585
+                                      ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))
586
+#endif
587
+#if defined (STM32F101xG)
588
+#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO)  || \
589
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1)   || \
590
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)   || \
591
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO)  || \
592
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \
593
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4)   || \
594
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)  || \
595
+                                      ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))
596
+#endif
597
+#if defined (STM32F103xE) || defined (STM32F103xG)
598
+#define IS_ADC_EXTTRIGINJEC(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO)  || \
599
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1)   || \
600
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)   || \
601
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO)  || \
602
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4)   || \
603
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || \
604
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3)   || \
605
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2)   || \
606
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO)  || \
607
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4)   || \
608
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4)   || \
609
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)  || \
610
+                                      ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4)   || \
611
+                                      ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))
612
+#endif
613
+
614
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
615
+#define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT)                || \
616
+                           ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT)  || \
617
+                           ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG)    || \
618
+                           ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLFAST) || \
619
+                           ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLSLOW) || \
620
+                           ((MODE) == ADC_DUALMODE_INJECSIMULT)            || \
621
+                           ((MODE) == ADC_DUALMODE_REGSIMULT)              || \
622
+                           ((MODE) == ADC_DUALMODE_INTERLFAST)             || \
623
+                           ((MODE) == ADC_DUALMODE_INTERLSLOW)             || \
624
+                           ((MODE) == ADC_DUALMODE_ALTERTRIG) )
625
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
626
+
627
+/**
628
+  * @}
629
+  */      
630
+   
631
+    
632
+
633
+    
634
+    
635
+   
636
+/* Exported functions --------------------------------------------------------*/
637
+/** @addtogroup ADCEx_Exported_Functions
638
+  * @{
639
+  */
640
+
641
+/* IO operation functions  *****************************************************/
642
+/** @addtogroup ADCEx_Exported_Functions_Group1
643
+  * @{
644
+  */
645
+
646
+/* ADC calibration */
647
+HAL_StatusTypeDef       HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);
648
+
649
+/* Blocking mode: Polling */
650
+HAL_StatusTypeDef       HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc);
651
+HAL_StatusTypeDef       HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc);
652
+HAL_StatusTypeDef       HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
653
+
654
+/* Non-blocking mode: Interruption */
655
+HAL_StatusTypeDef       HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc);
656
+HAL_StatusTypeDef       HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc);
657
+
658
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
659
+/* ADC multimode */
660
+HAL_StatusTypeDef       HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);
661
+HAL_StatusTypeDef       HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc); 
662
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
663
+
664
+/* ADC retrieve conversion value intended to be used with polling or interruption */
665
+uint32_t                HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank);
666
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
667
+uint32_t                HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc);
668
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
669
+
670
+/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */
671
+void                    HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc);
672
+/**
673
+  * @}
674
+  */
675
+
676
+
677
+/* Peripheral Control functions ***********************************************/
678
+/** @addtogroup ADCEx_Exported_Functions_Group2
679
+  * @{
680
+  */
681
+HAL_StatusTypeDef       HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected);
682
+#if defined (STM32F103x6) || defined (STM32F103xB) || defined (STM32F105xC) || defined (STM32F107xC) || defined (STM32F103xE) || defined (STM32F103xG)
683
+HAL_StatusTypeDef       HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode);
684
+#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */
685
+/**
686
+  * @}
687
+  */
688
+
689
+
690
+/**
691
+  * @}
692
+  */
693
+
694
+
695
+/**
696
+  * @}
697
+  */ 
698
+
699
+/**
700
+  * @}
701
+  */
702
+  
703
+#ifdef __cplusplus
704
+}
705
+#endif
706
+
707
+#endif /* __STM32F1xx_HAL_ADC_EX_H */
708
+
709
+
710
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2414 - 0
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1323 - 0
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c


+ 50 - 0
Inc/main.h

@@ -58,6 +58,30 @@ void Error_Handler(void);
58 58
 /* USER CODE END EFP */
59 59
 
60 60
 /* Private defines -----------------------------------------------------------*/
61
+#define FAIL_MBIC_Pin GPIO_PIN_4
62
+#define FAIL_MBIC_GPIO_Port GPIOE
63
+#define BOOT_LED_Pin GPIO_PIN_15
64
+#define BOOT_LED_GPIO_Port GPIOC
65
+#define RFU_TX_Pin GPIO_PIN_2
66
+#define RFU_TX_GPIO_Port GPIOA
67
+#define RFU_RX_Pin GPIO_PIN_3
68
+#define RFU_RX_GPIO_Port GPIOA
69
+#define ATT_CLOCK3_Pin GPIO_PIN_0
70
+#define ATT_CLOCK3_GPIO_Port GPIOG
71
+#define ATT_DATA3_Pin GPIO_PIN_1
72
+#define ATT_DATA3_GPIO_Port GPIOG
73
+#define ATT_CLOCK4_Pin GPIO_PIN_10
74
+#define ATT_CLOCK4_GPIO_Port GPIOE
75
+#define ATT_DATA4_Pin GPIO_PIN_11
76
+#define ATT_DATA4_GPIO_Port GPIOE
77
+#define ATT_EN_DL4_Pin GPIO_PIN_12
78
+#define ATT_EN_DL4_GPIO_Port GPIOE
79
+#define ATT_EN_UL4_Pin GPIO_PIN_13
80
+#define ATT_EN_UL4_GPIO_Port GPIOE
81
+#define PATH_EN_DL4_Pin GPIO_PIN_14
82
+#define PATH_EN_DL4_GPIO_Port GPIOE
83
+#define PATH_EN_UL4_Pin GPIO_PIN_15
84
+#define PATH_EN_UL4_GPIO_Port GPIOE
61 85
 #define EEPROM_SCL_Pin GPIO_PIN_10
62 86
 #define EEPROM_SCL_GPIO_Port GPIOB
63 87
 #define EEPROM_SDA_Pin GPIO_PIN_11
@@ -70,6 +94,18 @@ void Error_Handler(void);
70 94
 #define PATH_EN_DL2_GPIO_Port GPIOD
71 95
 #define PATH_EN_UL2_Pin GPIO_PIN_11
72 96
 #define PATH_EN_UL2_GPIO_Port GPIOD
97
+#define LED_ACT_Pin GPIO_PIN_14
98
+#define LED_ACT_GPIO_Port GPIOD
99
+#define ATT_EN_DL3_Pin GPIO_PIN_2
100
+#define ATT_EN_DL3_GPIO_Port GPIOG
101
+#define ATT_EN_UL3_Pin GPIO_PIN_3
102
+#define ATT_EN_UL3_GPIO_Port GPIOG
103
+#define PATH_EN_DL3_Pin GPIO_PIN_4
104
+#define PATH_EN_DL3_GPIO_Port GPIOG
105
+#define PATH_EN_UL3_Pin GPIO_PIN_5
106
+#define PATH_EN_UL3_GPIO_Port GPIOG
107
+#define _PATH_SW1_Pin GPIO_PIN_8
108
+#define _PATH_SW1_GPIO_Port GPIOG
73 109
 #define PATH_EN_UL1_Pin GPIO_PIN_6
74 110
 #define PATH_EN_UL1_GPIO_Port GPIOC
75 111
 #define MBIC_UP_Pin GPIO_PIN_9
@@ -84,6 +120,20 @@ void Error_Handler(void);
84 120
 #define ATT_EN_DL2_GPIO_Port GPIOD
85 121
 #define ATT_EN_UL2_Pin GPIO_PIN_7
86 122
 #define ATT_EN_UL2_GPIO_Port GPIOD
123
+#define PATH_SW1_Pin GPIO_PIN_9
124
+#define PATH_SW1_GPIO_Port GPIOG
125
+#define _PATH_SW2_Pin GPIO_PIN_10
126
+#define _PATH_SW2_GPIO_Port GPIOG
127
+#define PATH_SW2_Pin GPIO_PIN_11
128
+#define PATH_SW2_GPIO_Port GPIOG
129
+#define _PATH_SW3_Pin GPIO_PIN_12
130
+#define _PATH_SW3_GPIO_Port GPIOG
131
+#define PATH_SW3_Pin GPIO_PIN_13
132
+#define PATH_SW3_GPIO_Port GPIOG
133
+#define _PATH_SW4_Pin GPIO_PIN_14
134
+#define _PATH_SW4_GPIO_Port GPIOG
135
+#define PATH_SW4_Pin GPIO_PIN_15
136
+#define PATH_SW4_GPIO_Port GPIOG
87 137
 #define ATT_CLOCK1_Pin GPIO_PIN_6
88 138
 #define ATT_CLOCK1_GPIO_Port GPIOB
89 139
 #define ATT_DATA1_Pin GPIO_PIN_7

+ 1 - 1
Inc/stm32f1xx_hal_conf.h

@@ -33,7 +33,7 @@
33 33
   */
34 34
   
35 35
 #define HAL_MODULE_ENABLED  
36
-  /*#define HAL_ADC_MODULE_ENABLED   */
36
+  #define HAL_ADC_MODULE_ENABLED
37 37
 /*#define HAL_CRYP_MODULE_ENABLED   */
38 38
 /*#define HAL_CAN_MODULE_ENABLED   */
39 39
 /*#define HAL_CAN_LEGACY_MODULE_ENABLED   */

+ 217 - 33
STM32F103ZET_JDASMBIC.ioc

@@ -1,4 +1,15 @@
1 1
 #MicroXplorer Configuration settings - do not modify
2
+ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_4
3
+ADC1.IPParameters=Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,NbrOfConversionFlag,master
4
+ADC1.NbrOfConversionFlag=1
5
+ADC1.Rank-2\#ChannelRegularConversion=1
6
+ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
7
+ADC1.master=1
8
+ADC3.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_4
9
+ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag
10
+ADC3.NbrOfConversionFlag=1
11
+ADC3.Rank-0\#ChannelRegularConversion=1
12
+ADC3.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
2 13
 Dma.Request0=USART1_RX
3 14
 Dma.Request1=USART1_TX
4 15
 Dma.RequestsNb=2
@@ -21,40 +32,78 @@ Dma.USART1_TX.1.PeriphInc=DMA_PINC_DISABLE
21 32
 Dma.USART1_TX.1.Priority=DMA_PRIORITY_LOW
22 33
 Dma.USART1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
23 34
 File.Version=6
24
-GPIO.groupedBy=
35
+GPIO.groupedBy=Group By Peripherals
25 36
 KeepUserPlacement=false
26 37
 Mcu.Family=STM32F1
27
-Mcu.IP0=DMA
28
-Mcu.IP1=I2C2
29
-Mcu.IP2=NVIC
30
-Mcu.IP3=RCC
31
-Mcu.IP4=SYS
32
-Mcu.IP5=TIM6
33
-Mcu.IP6=USART1
34
-Mcu.IPNb=7
38
+Mcu.IP0=ADC1
39
+Mcu.IP1=ADC3
40
+Mcu.IP2=DMA
41
+Mcu.IP3=I2C2
42
+Mcu.IP4=NVIC
43
+Mcu.IP5=RCC
44
+Mcu.IP6=SYS
45
+Mcu.IP7=TIM6
46
+Mcu.IP8=USART1
47
+Mcu.IP9=USART2
48
+Mcu.IPNb=10
35 49
 Mcu.Name=STM32F103Z(C-D-E)Tx
36 50
 Mcu.Package=LQFP144
37
-Mcu.Pin0=PB10
38
-Mcu.Pin1=PB11
39
-Mcu.Pin10=PA14
40
-Mcu.Pin11=PD2
41
-Mcu.Pin12=PD3
42
-Mcu.Pin13=PD4
43
-Mcu.Pin14=PD7
44
-Mcu.Pin15=PB6
45
-Mcu.Pin16=PB7
46
-Mcu.Pin17=PB9
47
-Mcu.Pin18=VP_SYS_VS_tim2
48
-Mcu.Pin19=VP_TIM6_VS_ClockSourceINT
49
-Mcu.Pin2=PB14
50
-Mcu.Pin3=PB15
51
-Mcu.Pin4=PD10
52
-Mcu.Pin5=PD11
53
-Mcu.Pin6=PC6
54
-Mcu.Pin7=PA9
55
-Mcu.Pin8=PA10
56
-Mcu.Pin9=PA13
57
-Mcu.PinsNb=20
51
+Mcu.Pin0=PE3
52
+Mcu.Pin1=PE4
53
+Mcu.Pin10=PA4
54
+Mcu.Pin11=PA5
55
+Mcu.Pin12=PA6
56
+Mcu.Pin13=PG0
57
+Mcu.Pin14=PG1
58
+Mcu.Pin15=PE10
59
+Mcu.Pin16=PE11
60
+Mcu.Pin17=PE12
61
+Mcu.Pin18=PE13
62
+Mcu.Pin19=PE14
63
+Mcu.Pin2=PC15-OSC32_OUT
64
+Mcu.Pin20=PE15
65
+Mcu.Pin21=PB10
66
+Mcu.Pin22=PB11
67
+Mcu.Pin23=PB14
68
+Mcu.Pin24=PB15
69
+Mcu.Pin25=PD10
70
+Mcu.Pin26=PD11
71
+Mcu.Pin27=PD14
72
+Mcu.Pin28=PD15
73
+Mcu.Pin29=PG2
74
+Mcu.Pin3=PF6
75
+Mcu.Pin30=PG3
76
+Mcu.Pin31=PG4
77
+Mcu.Pin32=PG5
78
+Mcu.Pin33=PG8
79
+Mcu.Pin34=PC6
80
+Mcu.Pin35=PA9
81
+Mcu.Pin36=PA10
82
+Mcu.Pin37=PA13
83
+Mcu.Pin38=PA14
84
+Mcu.Pin39=PD2
85
+Mcu.Pin4=PF7
86
+Mcu.Pin40=PD3
87
+Mcu.Pin41=PD4
88
+Mcu.Pin42=PD7
89
+Mcu.Pin43=PG9
90
+Mcu.Pin44=PG10
91
+Mcu.Pin45=PG11
92
+Mcu.Pin46=PG12
93
+Mcu.Pin47=PG13
94
+Mcu.Pin48=PG14
95
+Mcu.Pin49=PG15
96
+Mcu.Pin5=PF8
97
+Mcu.Pin50=PB6
98
+Mcu.Pin51=PB7
99
+Mcu.Pin52=PB9
100
+Mcu.Pin53=VP_SYS_VS_tim2
101
+Mcu.Pin54=VP_TIM6_VS_ClockSourceINT
102
+Mcu.Pin6=PF9
103
+Mcu.Pin7=PF10
104
+Mcu.Pin8=PA2
105
+Mcu.Pin9=PA3
106
+Mcu.PinsNb=55
58 107
 Mcu.ThirdPartyNb=0
59 108
 Mcu.UserConstants=
60 109
 Mcu.UserName=STM32F103ZETx
@@ -85,6 +134,20 @@ PA13.Mode=Serial_Wire
85 134
 PA13.Signal=SYS_JTMS-SWDIO
86 135
 PA14.Mode=Serial_Wire
87 136
 PA14.Signal=SYS_JTCK-SWCLK
137
+PA2.GPIOParameters=GPIO_Label
138
+PA2.GPIO_Label=RFU_TX
139
+PA2.Mode=Asynchronous
140
+PA2.Signal=USART2_TX
141
+PA3.GPIOParameters=GPIO_Label
142
+PA3.GPIO_Label=RFU_RX
143
+PA3.Mode=Asynchronous
144
+PA3.Signal=USART2_RX
145
+PA4.Locked=true
146
+PA4.Signal=ADCx_IN4
147
+PA5.Locked=true
148
+PA5.Signal=ADCx_IN5
149
+PA6.Locked=true
150
+PA6.Signal=ADCx_IN6
88 151
 PA9.GPIOParameters=GPIO_Label
89 152
 PA9.GPIO_Label=MBIC_UP
90 153
 PA9.Mode=Asynchronous
@@ -117,6 +180,10 @@ PB9.GPIOParameters=GPIO_Label
117 180
 PB9.GPIO_Label=ATT_EN_DL1
118 181
 PB9.Locked=true
119 182
 PB9.Signal=GPIO_Output
183
+PC15-OSC32_OUT.GPIOParameters=GPIO_Label
184
+PC15-OSC32_OUT.GPIO_Label=BOOT_LED
185
+PC15-OSC32_OUT.Locked=true
186
+PC15-OSC32_OUT.Signal=GPIO_Output
120 187
 PC6.GPIOParameters=GPIO_Label
121 188
 PC6.GPIO_Label=PATH_EN_UL1
122 189
 PC6.Locked=true
@@ -137,6 +204,12 @@ PD11.GPIOParameters=GPIO_Label
137 204
 PD11.GPIO_Label=PATH_EN_UL2
138 205
 PD11.Locked=true
139 206
 PD11.Signal=GPIO_Output
207
+PD14.GPIOParameters=GPIO_Label
208
+PD14.GPIO_Label=LED_ACT
209
+PD14.Locked=true
210
+PD14.Signal=GPIO_Output
211
+PD15.Locked=true
212
+PD15.Signal=GPIO_Output
140 213
 PD2.GPIOParameters=GPIO_Label
141 214
 PD2.GPIO_Label=ATT_CLOCK2
142 215
 PD2.Locked=true
@@ -153,6 +226,107 @@ PD7.GPIOParameters=GPIO_Label
153 226
 PD7.GPIO_Label=ATT_EN_UL2
154 227
 PD7.Locked=true
155 228
 PD7.Signal=GPIO_Output
229
+PE10.GPIOParameters=GPIO_Label
230
+PE10.GPIO_Label=ATT_CLOCK4
231
+PE10.Locked=true
232
+PE10.Signal=GPIO_Output
233
+PE11.GPIOParameters=GPIO_Label
234
+PE11.GPIO_Label=ATT_DATA4
235
+PE11.Locked=true
236
+PE11.Signal=GPIO_Output
237
+PE12.GPIOParameters=GPIO_Label
238
+PE12.GPIO_Label=ATT_EN_DL4
239
+PE12.Locked=true
240
+PE12.Signal=GPIO_Output
241
+PE13.GPIOParameters=GPIO_Label
242
+PE13.GPIO_Label=ATT_EN_UL4
243
+PE13.Locked=true
244
+PE13.Signal=GPIO_Output
245
+PE14.GPIOParameters=GPIO_Label
246
+PE14.GPIO_Label=PATH_EN_DL4
247
+PE14.Locked=true
248
+PE14.Signal=GPIO_Output
249
+PE15.GPIOParameters=GPIO_Label
250
+PE15.GPIO_Label=PATH_EN_UL4
251
+PE15.Locked=true
252
+PE15.Signal=GPIO_Output
253
+PE3.Locked=true
254
+PE3.Signal=GPIO_Output
255
+PE4.GPIOParameters=GPIO_Label
256
+PE4.GPIO_Label=FAIL_MBIC
257
+PE4.Locked=true
258
+PE4.Signal=GPIO_Output
259
+PF10.Locked=true
260
+PF10.Mode=IN8
261
+PF10.Signal=ADC3_IN8
262
+PF6.Locked=true
263
+PF6.Mode=IN4
264
+PF6.Signal=ADC3_IN4
265
+PF7.Locked=true
266
+PF7.Mode=IN5
267
+PF7.Signal=ADC3_IN5
268
+PF8.Locked=true
269
+PF8.Mode=IN6
270
+PF8.Signal=ADC3_IN6
271
+PF9.Locked=true
272
+PF9.Mode=IN7
273
+PF9.Signal=ADC3_IN7
274
+PG0.GPIOParameters=GPIO_Label
275
+PG0.GPIO_Label=ATT_CLOCK3
276
+PG0.Locked=true
277
+PG0.Signal=GPIO_Output
278
+PG1.GPIOParameters=GPIO_Label
279
+PG1.GPIO_Label=ATT_DATA3
280
+PG1.Locked=true
281
+PG1.Signal=GPIO_Output
282
+PG10.GPIOParameters=GPIO_Label
283
+PG10.GPIO_Label=_PATH_SW2
284
+PG10.Locked=true
285
+PG10.Signal=GPIO_Output
286
+PG11.GPIOParameters=GPIO_Label
287
+PG11.GPIO_Label=PATH_SW2
288
+PG11.Locked=true
289
+PG11.Signal=GPIO_Output
290
+PG12.GPIOParameters=GPIO_Label
291
+PG12.GPIO_Label=_PATH_SW3
292
+PG12.Locked=true
293
+PG12.Signal=GPIO_Output
294
+PG13.GPIOParameters=GPIO_Label
295
+PG13.GPIO_Label=PATH_SW3
296
+PG13.Locked=true
297
+PG13.Signal=GPIO_Output
298
+PG14.GPIOParameters=GPIO_Label
299
+PG14.GPIO_Label=_PATH_SW4
300
+PG14.Locked=true
301
+PG14.Signal=GPIO_Output
302
+PG15.GPIOParameters=GPIO_Label
303
+PG15.GPIO_Label=PATH_SW4
304
+PG15.Locked=true
305
+PG15.Signal=GPIO_Output
306
+PG2.GPIOParameters=GPIO_Label
307
+PG2.GPIO_Label=ATT_EN_DL3
308
+PG2.Locked=true
309
+PG2.Signal=GPIO_Output
310
+PG3.GPIOParameters=GPIO_Label
311
+PG3.GPIO_Label=ATT_EN_UL3
312
+PG3.Locked=true
313
+PG3.Signal=GPIO_Output
314
+PG4.GPIOParameters=GPIO_Label
315
+PG4.GPIO_Label=PATH_EN_DL3
316
+PG4.Locked=true
317
+PG4.Signal=GPIO_Output
318
+PG5.GPIOParameters=GPIO_Label
319
+PG5.GPIO_Label=PATH_EN_UL3
320
+PG5.Locked=true
321
+PG5.Signal=GPIO_Output
322
+PG8.GPIOParameters=GPIO_Label
323
+PG8.GPIO_Label=_PATH_SW1
324
+PG8.Locked=true
325
+PG8.Signal=GPIO_Output
326
+PG9.GPIOParameters=GPIO_Label
327
+PG9.GPIO_Label=PATH_SW1
328
+PG9.Locked=true
329
+PG9.Signal=GPIO_Output
156 330
 PinOutPanel.RotationAngle=0
157 331
 ProjectManager.AskForMigrate=true
158 332
 ProjectManager.BackupPrevious=false
@@ -181,7 +355,8 @@ ProjectManager.TargetToolchain=TrueSTUDIO
181 355
 ProjectManager.ToolChainLocation=
182 356
 ProjectManager.UnderRoot=true
183 357
 ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_I2C2_Init-I2C2-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true
184
-RCC.ADCFreqValue=32000000
358
+RCC.ADCFreqValue=8000000
359
+RCC.ADCPresc=RCC_ADCPCLK2_DIV8
185 360
 RCC.AHBFreq_Value=64000000
186 361
 RCC.APB1CLKDivider=RCC_HCLK_DIV2
187 362
 RCC.APB1Freq_Value=32000000
@@ -194,7 +369,7 @@ RCC.FamilyName=M
194 369
 RCC.HCLKFreq_Value=64000000
195 370
 RCC.I2S2Freq_Value=64000000
196 371
 RCC.I2S3Freq_Value=64000000
197
-RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value
372
+RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FSMCFreq_Value,FamilyName,HCLKFreq_Value,I2S2Freq_Value,I2S3Freq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,SDIOFreq_Value,SDIOHCLKDiv2FreqValue,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value
198 373
 RCC.MCOFreq_Value=64000000
199 374
 RCC.PLLCLKFreq_Value=64000000
200 375
 RCC.PLLMCOFreq_Value=32000000
@@ -205,11 +380,20 @@ RCC.SYSCLKFreq_VALUE=64000000
205 380
 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
206 381
 RCC.TimSysFreq_Value=64000000
207 382
 RCC.USBFreq_Value=64000000
383
+SH.ADCx_IN4.0=ADC1_IN4,IN4
384
+SH.ADCx_IN4.ConfNb=1
385
+SH.ADCx_IN5.0=ADC1_IN5,IN5
386
+SH.ADCx_IN5.ConfNb=1
387
+SH.ADCx_IN6.0=ADC1_IN6,IN6
388
+SH.ADCx_IN6.ConfNb=1
208 389
 TIM6.IPParameters=Prescaler,Period
209 390
 TIM6.Period=1
210 391
 TIM6.Prescaler=64000-1
211
-USART1.IPParameters=VirtualMode
392
+USART1.BaudRate=921600
393
+USART1.IPParameters=VirtualMode,BaudRate
212 394
 USART1.VirtualMode=VM_ASYNC
395
+USART2.IPParameters=VirtualMode
396
+USART2.VirtualMode=VM_ASYNC
213 397
 VP_SYS_VS_tim2.Mode=TIM2
214 398
 VP_SYS_VS_tim2.Signal=SYS_VS_tim2
215 399
 VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer

+ 193 - 18
Src/main.c

@@ -41,11 +41,15 @@
41 41
 /* USER CODE END PM */
42 42
 
43 43
 /* Private variables ---------------------------------------------------------*/
44
+ADC_HandleTypeDef hadc1;
45
+ADC_HandleTypeDef hadc3;
46
+
44 47
 I2C_HandleTypeDef hi2c2;
45 48
 
46 49
 TIM_HandleTypeDef htim6;
47 50
 
48 51
 UART_HandleTypeDef huart1;
52
+UART_HandleTypeDef huart2;
49 53
 DMA_HandleTypeDef hdma_usart1_rx;
50 54
 DMA_HandleTypeDef hdma_usart1_tx;
51 55
 
@@ -59,7 +63,10 @@ static void MX_GPIO_Init(void);
59 63
 static void MX_DMA_Init(void);
60 64
 static void MX_I2C2_Init(void);
61 65
 static void MX_USART1_UART_Init(void);
66
+static void MX_ADC1_Init(void);
67
+static void MX_ADC3_Init(void);
62 68
 static void MX_TIM6_Init(void);
69
+static void MX_USART2_UART_Init(void);
63 70
 /* USER CODE BEGIN PFP */
64 71
 
65 72
 /* USER CODE END PFP */
@@ -101,7 +108,10 @@ int main(void)
101 108
   MX_DMA_Init();
102 109
   MX_I2C2_Init();
103 110
   MX_USART1_UART_Init();
111
+  MX_ADC1_Init();
112
+  MX_ADC3_Init();
104 113
   MX_TIM6_Init();
114
+  MX_USART2_UART_Init();
105 115
   /* USER CODE BEGIN 2 */
106 116
 
107 117
   /* USER CODE END 2 */
@@ -127,6 +137,7 @@ void SystemClock_Config(void)
127 137
 {
128 138
   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
129 139
   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
140
+  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
130 141
 
131 142
   /** Initializes the CPU, AHB and APB busses clocks 
132 143
   */
@@ -153,6 +164,102 @@ void SystemClock_Config(void)
153 164
   {
154 165
     Error_Handler();
155 166
   }
167
+  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
168
+  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8;
169
+  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
170
+  {
171
+    Error_Handler();
172
+  }
173
+}
174
+
175
+/**
176
+  * @brief ADC1 Initialization Function
177
+  * @param None
178
+  * @retval None
179
+  */
180
+static void MX_ADC1_Init(void)
181
+{
182
+
183
+  /* USER CODE BEGIN ADC1_Init 0 */
184
+
185
+  /* USER CODE END ADC1_Init 0 */
186
+
187
+  ADC_ChannelConfTypeDef sConfig = {0};
188
+
189
+  /* USER CODE BEGIN ADC1_Init 1 */
190
+
191
+  /* USER CODE END ADC1_Init 1 */
192
+  /** Common config 
193
+  */
194
+  hadc1.Instance = ADC1;
195
+  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
196
+  hadc1.Init.ContinuousConvMode = DISABLE;
197
+  hadc1.Init.DiscontinuousConvMode = DISABLE;
198
+  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
199
+  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
200
+  hadc1.Init.NbrOfConversion = 1;
201
+  if (HAL_ADC_Init(&hadc1) != HAL_OK)
202
+  {
203
+    Error_Handler();
204
+  }
205
+  /** Configure Regular Channel 
206
+  */
207
+  sConfig.Channel = ADC_CHANNEL_4;
208
+  sConfig.Rank = ADC_REGULAR_RANK_1;
209
+  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
210
+  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
211
+  {
212
+    Error_Handler();
213
+  }
214
+  /* USER CODE BEGIN ADC1_Init 2 */
215
+
216
+  /* USER CODE END ADC1_Init 2 */
217
+
218
+}
219
+
220
+/**
221
+  * @brief ADC3 Initialization Function
222
+  * @param None
223
+  * @retval None
224
+  */
225
+static void MX_ADC3_Init(void)
226
+{
227
+
228
+  /* USER CODE BEGIN ADC3_Init 0 */
229
+
230
+  /* USER CODE END ADC3_Init 0 */
231
+
232
+  ADC_ChannelConfTypeDef sConfig = {0};
233
+
234
+  /* USER CODE BEGIN ADC3_Init 1 */
235
+
236
+  /* USER CODE END ADC3_Init 1 */
237
+  /** Common config 
238
+  */
239
+  hadc3.Instance = ADC3;
240
+  hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
241
+  hadc3.Init.ContinuousConvMode = DISABLE;
242
+  hadc3.Init.DiscontinuousConvMode = DISABLE;
243
+  hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
244
+  hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
245
+  hadc3.Init.NbrOfConversion = 1;
246
+  if (HAL_ADC_Init(&hadc3) != HAL_OK)
247
+  {
248
+    Error_Handler();
249
+  }
250
+  /** Configure Regular Channel 
251
+  */
252
+  sConfig.Channel = ADC_CHANNEL_4;
253
+  sConfig.Rank = ADC_REGULAR_RANK_1;
254
+  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
255
+  if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
256
+  {
257
+    Error_Handler();
258
+  }
259
+  /* USER CODE BEGIN ADC3_Init 2 */
260
+
261
+  /* USER CODE END ADC3_Init 2 */
262
+
156 263
 }
157 264
 
158 265
 /**
@@ -243,7 +350,7 @@ static void MX_USART1_UART_Init(void)
243 350
 
244 351
   /* USER CODE END USART1_Init 1 */
245 352
   huart1.Instance = USART1;
246
-  huart1.Init.BaudRate = 115200;
353
+  huart1.Init.BaudRate = 921600;
247 354
   huart1.Init.WordLength = UART_WORDLENGTH_8B;
248 355
   huart1.Init.StopBits = UART_STOPBITS_1;
249 356
   huart1.Init.Parity = UART_PARITY_NONE;
@@ -260,6 +367,39 @@ static void MX_USART1_UART_Init(void)
260 367
 
261 368
 }
262 369
 
370
+/**
371
+  * @brief USART2 Initialization Function
372
+  * @param None
373
+  * @retval None
374
+  */
375
+static void MX_USART2_UART_Init(void)
376
+{
377
+
378
+  /* USER CODE BEGIN USART2_Init 0 */
379
+
380
+  /* USER CODE END USART2_Init 0 */
381
+
382
+  /* USER CODE BEGIN USART2_Init 1 */
383
+
384
+  /* USER CODE END USART2_Init 1 */
385
+  huart2.Instance = USART2;
386
+  huart2.Init.BaudRate = 115200;
387
+  huart2.Init.WordLength = UART_WORDLENGTH_8B;
388
+  huart2.Init.StopBits = UART_STOPBITS_1;
389
+  huart2.Init.Parity = UART_PARITY_NONE;
390
+  huart2.Init.Mode = UART_MODE_TX_RX;
391
+  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
392
+  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
393
+  if (HAL_UART_Init(&huart2) != HAL_OK)
394
+  {
395
+    Error_Handler();
396
+  }
397
+  /* USER CODE BEGIN USART2_Init 2 */
398
+
399
+  /* USER CODE END USART2_Init 2 */
400
+
401
+}
402
+
263 403
 /** 
264 404
   * Enable DMA controller clock
265 405
   */
@@ -289,21 +429,63 @@ static void MX_GPIO_Init(void)
289 429
   GPIO_InitTypeDef GPIO_InitStruct = {0};
290 430
 
291 431
   /* GPIO Ports Clock Enable */
292
-  __HAL_RCC_GPIOB_CLK_ENABLE();
293
-  __HAL_RCC_GPIOD_CLK_ENABLE();
432
+  __HAL_RCC_GPIOE_CLK_ENABLE();
294 433
   __HAL_RCC_GPIOC_CLK_ENABLE();
434
+  __HAL_RCC_GPIOF_CLK_ENABLE();
295 435
   __HAL_RCC_GPIOA_CLK_ENABLE();
436
+  __HAL_RCC_GPIOG_CLK_ENABLE();
437
+  __HAL_RCC_GPIOB_CLK_ENABLE();
438
+  __HAL_RCC_GPIOD_CLK_ENABLE();
439
+
440
+  /*Configure GPIO pin Output Level */
441
+  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
442
+                          |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin, GPIO_PIN_RESET);
443
+
444
+  /*Configure GPIO pin Output Level */
445
+  HAL_GPIO_WritePin(GPIOC, BOOT_LED_Pin|PATH_EN_UL1_Pin, GPIO_PIN_RESET);
446
+
447
+  /*Configure GPIO pin Output Level */
448
+  HAL_GPIO_WritePin(GPIOG, ATT_CLOCK3_Pin|ATT_DATA3_Pin|ATT_EN_DL3_Pin|ATT_EN_UL3_Pin 
449
+                          |PATH_EN_DL3_Pin|PATH_EN_UL3_Pin|_PATH_SW1_Pin|PATH_SW1_Pin 
450
+                          |_PATH_SW2_Pin|PATH_SW2_Pin|_PATH_SW3_Pin|PATH_SW3_Pin 
451
+                          |_PATH_SW4_Pin|PATH_SW4_Pin, GPIO_PIN_RESET);
296 452
 
297 453
   /*Configure GPIO pin Output Level */
298 454
   HAL_GPIO_WritePin(GPIOB, ATT_EN_UL1_Pin|PATH_EN_DL1_Pin|ATT_CLOCK1_Pin|ATT_DATA1_Pin 
299 455
                           |ATT_EN_DL1_Pin, GPIO_PIN_RESET);
300 456
 
301 457
   /*Configure GPIO pin Output Level */
302
-  HAL_GPIO_WritePin(GPIOD, PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|ATT_CLOCK2_Pin|ATT_DATA2_Pin 
303
-                          |ATT_EN_DL2_Pin|ATT_EN_UL2_Pin, GPIO_PIN_RESET);
458
+  HAL_GPIO_WritePin(GPIOD, PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15 
459
+                          |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin, GPIO_PIN_RESET);
304 460
 
305
-  /*Configure GPIO pin Output Level */
306
-  HAL_GPIO_WritePin(PATH_EN_UL1_GPIO_Port, PATH_EN_UL1_Pin, GPIO_PIN_RESET);
461
+  /*Configure GPIO pins : PE3 FAIL_MBIC_Pin ATT_CLOCK4_Pin ATT_DATA4_Pin 
462
+                           ATT_EN_DL4_Pin ATT_EN_UL4_Pin PATH_EN_DL4_Pin PATH_EN_UL4_Pin */
463
+  GPIO_InitStruct.Pin = GPIO_PIN_3|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
464
+                          |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin;
465
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
466
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
467
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
468
+  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
469
+
470
+  /*Configure GPIO pins : BOOT_LED_Pin PATH_EN_UL1_Pin */
471
+  GPIO_InitStruct.Pin = BOOT_LED_Pin|PATH_EN_UL1_Pin;
472
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
473
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
474
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
475
+  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
476
+
477
+  /*Configure GPIO pins : ATT_CLOCK3_Pin ATT_DATA3_Pin ATT_EN_DL3_Pin ATT_EN_UL3_Pin 
478
+                           PATH_EN_DL3_Pin PATH_EN_UL3_Pin _PATH_SW1_Pin PATH_SW1_Pin 
479
+                           _PATH_SW2_Pin PATH_SW2_Pin _PATH_SW3_Pin PATH_SW3_Pin 
480
+                           _PATH_SW4_Pin PATH_SW4_Pin */
481
+  GPIO_InitStruct.Pin = ATT_CLOCK3_Pin|ATT_DATA3_Pin|ATT_EN_DL3_Pin|ATT_EN_UL3_Pin 
482
+                          |PATH_EN_DL3_Pin|PATH_EN_UL3_Pin|_PATH_SW1_Pin|PATH_SW1_Pin 
483
+                          |_PATH_SW2_Pin|PATH_SW2_Pin|_PATH_SW3_Pin|PATH_SW3_Pin 
484
+                          |_PATH_SW4_Pin|PATH_SW4_Pin;
485
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
486
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
487
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
488
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
307 489
 
308 490
   /*Configure GPIO pins : ATT_EN_UL1_Pin PATH_EN_DL1_Pin ATT_CLOCK1_Pin ATT_DATA1_Pin 
309 491
                            ATT_EN_DL1_Pin */
@@ -314,22 +496,15 @@ static void MX_GPIO_Init(void)
314 496
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
315 497
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
316 498
 
317
-  /*Configure GPIO pins : PATH_EN_DL2_Pin PATH_EN_UL2_Pin ATT_CLOCK2_Pin ATT_DATA2_Pin 
318
-                           ATT_EN_DL2_Pin ATT_EN_UL2_Pin */
319
-  GPIO_InitStruct.Pin = PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|ATT_CLOCK2_Pin|ATT_DATA2_Pin 
320
-                          |ATT_EN_DL2_Pin|ATT_EN_UL2_Pin;
499
+  /*Configure GPIO pins : PATH_EN_DL2_Pin PATH_EN_UL2_Pin LED_ACT_Pin PD15 
500
+                           ATT_CLOCK2_Pin ATT_DATA2_Pin ATT_EN_DL2_Pin ATT_EN_UL2_Pin */
501
+  GPIO_InitStruct.Pin = PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15 
502
+                          |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin;
321 503
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
322 504
   GPIO_InitStruct.Pull = GPIO_NOPULL;
323 505
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
324 506
   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
325 507
 
326
-  /*Configure GPIO pin : PATH_EN_UL1_Pin */
327
-  GPIO_InitStruct.Pin = PATH_EN_UL1_Pin;
328
-  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
329
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
330
-  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
331
-  HAL_GPIO_Init(PATH_EN_UL1_GPIO_Port, &GPIO_InitStruct);
332
-
333 508
 }
334 509
 
335 510
 /* USER CODE BEGIN 4 */

+ 156 - 0
Src/stm32f1xx_hal_msp.c

@@ -84,6 +84,117 @@ void HAL_MspInit(void)
84 84
   /* USER CODE END MspInit 1 */
85 85
 }
86 86
 
87
+/**
88
+* @brief ADC MSP Initialization
89
+* This function configures the hardware resources used in this example
90
+* @param hadc: ADC handle pointer
91
+* @retval None
92
+*/
93
+void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
94
+{
95
+  GPIO_InitTypeDef GPIO_InitStruct = {0};
96
+  if(hadc->Instance==ADC1)
97
+  {
98
+  /* USER CODE BEGIN ADC1_MspInit 0 */
99
+
100
+  /* USER CODE END ADC1_MspInit 0 */
101
+    /* Peripheral clock enable */
102
+    __HAL_RCC_ADC1_CLK_ENABLE();
103
+  
104
+    __HAL_RCC_GPIOA_CLK_ENABLE();
105
+    /**ADC1 GPIO Configuration    
106
+    PA4     ------> ADC1_IN4
107
+    PA5     ------> ADC1_IN5
108
+    PA6     ------> ADC1_IN6 
109
+    */
110
+    GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
111
+    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
112
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
113
+
114
+  /* USER CODE BEGIN ADC1_MspInit 1 */
115
+
116
+  /* USER CODE END ADC1_MspInit 1 */
117
+  }
118
+  else if(hadc->Instance==ADC3)
119
+  {
120
+  /* USER CODE BEGIN ADC3_MspInit 0 */
121
+
122
+  /* USER CODE END ADC3_MspInit 0 */
123
+    /* Peripheral clock enable */
124
+    __HAL_RCC_ADC3_CLK_ENABLE();
125
+  
126
+    __HAL_RCC_GPIOF_CLK_ENABLE();
127
+    /**ADC3 GPIO Configuration    
128
+    PF6     ------> ADC3_IN4
129
+    PF7     ------> ADC3_IN5
130
+    PF8     ------> ADC3_IN6
131
+    PF9     ------> ADC3_IN7
132
+    PF10     ------> ADC3_IN8 
133
+    */
134
+    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9 
135
+                          |GPIO_PIN_10;
136
+    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
137
+    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
138
+
139
+  /* USER CODE BEGIN ADC3_MspInit 1 */
140
+
141
+  /* USER CODE END ADC3_MspInit 1 */
142
+  }
143
+
144
+}
145
+
146
+/**
147
+* @brief ADC MSP De-Initialization
148
+* This function freeze the hardware resources used in this example
149
+* @param hadc: ADC handle pointer
150
+* @retval None
151
+*/
152
+void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
153
+{
154
+  if(hadc->Instance==ADC1)
155
+  {
156
+  /* USER CODE BEGIN ADC1_MspDeInit 0 */
157
+
158
+  /* USER CODE END ADC1_MspDeInit 0 */
159
+    /* Peripheral clock disable */
160
+    __HAL_RCC_ADC1_CLK_DISABLE();
161
+  
162
+    /**ADC1 GPIO Configuration    
163
+    PA4     ------> ADC1_IN4
164
+    PA5     ------> ADC1_IN5
165
+    PA6     ------> ADC1_IN6 
166
+    */
167
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);
168
+
169
+  /* USER CODE BEGIN ADC1_MspDeInit 1 */
170
+
171
+  /* USER CODE END ADC1_MspDeInit 1 */
172
+  }
173
+  else if(hadc->Instance==ADC3)
174
+  {
175
+  /* USER CODE BEGIN ADC3_MspDeInit 0 */
176
+
177
+  /* USER CODE END ADC3_MspDeInit 0 */
178
+    /* Peripheral clock disable */
179
+    __HAL_RCC_ADC3_CLK_DISABLE();
180
+  
181
+    /**ADC3 GPIO Configuration    
182
+    PF6     ------> ADC3_IN4
183
+    PF7     ------> ADC3_IN5
184
+    PF8     ------> ADC3_IN6
185
+    PF9     ------> ADC3_IN7
186
+    PF10     ------> ADC3_IN8 
187
+    */
188
+    HAL_GPIO_DeInit(GPIOF, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9 
189
+                          |GPIO_PIN_10);
190
+
191
+  /* USER CODE BEGIN ADC3_MspDeInit 1 */
192
+
193
+  /* USER CODE END ADC3_MspDeInit 1 */
194
+  }
195
+
196
+}
197
+
87 198
 /**
88 199
 * @brief I2C MSP Initialization
89 200
 * This function configures the hardware resources used in this example
@@ -263,6 +374,33 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
263 374
 
264 375
   /* USER CODE END USART1_MspInit 1 */
265 376
   }
377
+  else if(huart->Instance==USART2)
378
+  {
379
+  /* USER CODE BEGIN USART2_MspInit 0 */
380
+
381
+  /* USER CODE END USART2_MspInit 0 */
382
+    /* Peripheral clock enable */
383
+    __HAL_RCC_USART2_CLK_ENABLE();
384
+  
385
+    __HAL_RCC_GPIOA_CLK_ENABLE();
386
+    /**USART2 GPIO Configuration    
387
+    PA2     ------> USART2_TX
388
+    PA3     ------> USART2_RX 
389
+    */
390
+    GPIO_InitStruct.Pin = RFU_TX_Pin;
391
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
392
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
393
+    HAL_GPIO_Init(RFU_TX_GPIO_Port, &GPIO_InitStruct);
394
+
395
+    GPIO_InitStruct.Pin = RFU_RX_Pin;
396
+    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
397
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
398
+    HAL_GPIO_Init(RFU_RX_GPIO_Port, &GPIO_InitStruct);
399
+
400
+  /* USER CODE BEGIN USART2_MspInit 1 */
401
+
402
+  /* USER CODE END USART2_MspInit 1 */
403
+  }
266 404
 
267 405
 }
268 406
 
@@ -298,6 +436,24 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
298 436
 
299 437
   /* USER CODE END USART1_MspDeInit 1 */
300 438
   }
439
+  else if(huart->Instance==USART2)
440
+  {
441
+  /* USER CODE BEGIN USART2_MspDeInit 0 */
442
+
443
+  /* USER CODE END USART2_MspDeInit 0 */
444
+    /* Peripheral clock disable */
445
+    __HAL_RCC_USART2_CLK_DISABLE();
446
+  
447
+    /**USART2 GPIO Configuration    
448
+    PA2     ------> USART2_TX
449
+    PA3     ------> USART2_RX 
450
+    */
451
+    HAL_GPIO_DeInit(GPIOA, RFU_TX_Pin|RFU_RX_Pin);
452
+
453
+  /* USER CODE BEGIN USART2_MspDeInit 1 */
454
+
455
+  /* USER CODE END USART2_MspDeInit 1 */
456
+  }
301 457
 
302 458
 }
303 459