]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/cmsis/TARGET_STM/TARGET_STM32F1/stm32f1xx_hal_adc.h
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / cmsis / TARGET_STM / TARGET_STM32F1 / stm32f1xx_hal_adc.h
1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_hal_adc.h
4   * @author  MCD Application Team
5   * @version V1.0.0
6   * @date    15-December-2014
7   * @brief   Header file containing functions prototypes of ADC HAL library.
8   ******************************************************************************
9   * @attention
10   *
11   * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
12   *
13   * Redistribution and use in source and binary forms, with or without modification,
14   * are permitted provided that the following conditions are met:
15   *   1. Redistributions of source code must retain the above copyright notice,
16   *      this list of conditions and the following disclaimer.
17   *   2. Redistributions in binary form must reproduce the above copyright notice,
18   *      this list of conditions and the following disclaimer in the documentation
19   *      and/or other materials provided with the distribution.
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors
21   *      may be used to endorse or promote products derived from this software
22   *      without specific prior written permission.
23   *
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34   *
35   ******************************************************************************
36   */
37
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F1xx_HAL_ADC_H
40 #define __STM32F1xx_HAL_ADC_H
41
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f1xx_hal_def.h"  
48 /** @addtogroup STM32F1xx_HAL_Driver
49   * @{
50   */
51
52 /** @addtogroup ADC
53   * @{
54   */ 
55
56 /* Exported types ------------------------------------------------------------*/ 
57 /** @defgroup ADC_Exported_Types ADC Exported Types
58   * @{
59   */
60
61 /** 
62   * @brief  Structure definition of ADC and regular group initialization 
63   * @note   Parameters of this structure are shared within 2 scopes:
64   *          - Scope entire ADC (affects regular and injected groups): DataAlign, ScanConvMode.
65   *          - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv.
66   * @note   The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.
67   *         ADC can be either disabled or enabled without conversion on going on regular group.
68   */
69 typedef struct
70 {
71   uint32_t DataAlign;             /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)
72                                        or to left (if regular group: MSB on register bit 15 and LSB on register bit 4, if injected group (MSB kept as signed value due to potential negative value after offset application): MSB on register bit 14 and LSB on register bit 3).
73                                        This parameter can be a value of @ref ADC_Data_align */
74   uint32_t ScanConvMode;          /*!< Configures the sequencer of regular and injected groups.
75                                        This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.
76                                        If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1).
77                                                     Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1).
78                                        If enabled:  Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank).
79                                                     Scan direction is upward: from rank1 to rank 'n'.
80                                        This parameter can be a value of @ref ADC_Scan_mode
81                                        Note: For regular group, this parameter should be enabled in conversion either by polling (HAL_ADC_Start with Discontinuous mode and NbrOfDiscConversion=1)
82                                              or by DMA (HAL_ADC_Start_DMA), but not by interruption (HAL_ADC_Start_IT): in scan mode, interruption is triggered only on the
83                                              the last conversion of the sequence. All previous conversions would be overwritten by the last one.
84                                              Injected group used with scan mode has not this constraint: each rank has its own result register, no data is overwritten. */
85   uint32_t ContinuousConvMode;    /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,
86                                        after the selected trigger occurred (software start or external trigger).
87                                        This parameter can be set to ENABLE or DISABLE. */
88   uint32_t NbrOfConversion;       /*!< Specifies the number of ranks that will be converted within the regular group sequencer.
89                                        To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.
90                                        This parameter must be a number between Min_Data = 1 and Max_Data = 16. */
91   uint32_t DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
92                                        Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.
93                                        Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.
94                                        This parameter can be set to ENABLE or DISABLE. */
95   uint32_t NbrOfDiscConversion;   /*!< Specifies the number of discontinuous conversions in which the  main sequence of regular group (parameter NbrOfConversion) will be subdivided.
96                                        If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded.
97                                        This parameter must be a number between Min_Data = 1 and Max_Data = 8. */
98   uint32_t ExternalTrigConv;      /*!< Selects the external event used to trigger the conversion start of regular group.
99                                        If set to ADC_SOFTWARE_START, external triggers are disabled.
100                                        If set to external trigger source, triggering is on event rising edge.
101                                        This parameter can be a value of @ref ADC_External_trigger_source_Regular */
102 }ADC_InitTypeDef;
103
104 /** 
105   * @brief  Structure definition of ADC channel for regular group   
106   * @note   The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.
107   *         ADC can be either disabled or enabled without conversion on going on regular group.
108   */ 
109 typedef struct 
110 {
111   uint32_t Channel;                /*!< Specifies the channel to configure into ADC regular group.
112                                         This parameter can be a value of @ref ADC_channels
113                                         Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.
114                                         Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor) 
115                                         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.
116                                               It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.
117                                               Refer to errata sheet of these devices for more details. */
118   uint32_t Rank;                   /*!< Specifies the rank in the regular group sequencer 
119                                         This parameter can be a value of @ref ADC_regular_rank
120                                         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) */
121   uint32_t SamplingTime;           /*!< Sampling time value to be set for the selected channel.
122                                         Unit: ADC clock cycles
123                                         Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).
124                                         This parameter can be a value of @ref ADC_sampling_times
125                                         Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.
126                                                  If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.
127                                         Note: In case of usage of internal measurement channels (VrefInt/TempSensor),
128                                               sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)
129                                               Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */
130 }ADC_ChannelConfTypeDef;
131
132 /**
133   * @brief  ADC Configuration analog watchdog definition
134   * @note   The setting of these parameters with function is conditioned to ADC state.
135   *         ADC state can be either disabled or enabled without conversion on going on regular and injected groups.
136   */
137 typedef struct
138 {
139   uint32_t WatchdogMode;      /*!< Configures the ADC analog watchdog mode: single/all channels, regular/injected group.
140                                    This parameter can be a value of @ref ADC_analog_watchdog_mode. */
141   uint32_t Channel;           /*!< Selects which ADC channel to monitor by analog watchdog.
142                                    This parameter has an effect only if watchdog mode is configured on single channel (parameter WatchdogMode)
143                                    This parameter can be a value of @ref ADC_channels. */
144   uint32_t ITMode;            /*!< Specifies whether the analog watchdog is configured in interrupt or polling mode.
145                                    This parameter can be set to ENABLE or DISABLE */
146   uint32_t HighThreshold;     /*!< Configures the ADC analog watchdog High threshold value.
147                                    This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */
148   uint32_t LowThreshold;      /*!< Configures the ADC analog watchdog High threshold value.
149                                    This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */
150   uint32_t WatchdogNumber;    /*!< Reserved for future use, can be set to 0 */
151 }ADC_AnalogWDGConfTypeDef;
152
153 /** 
154   * @brief  HAL ADC state machine: ADC States structure definition  
155   */ 
156 typedef enum
157 {
158   HAL_ADC_STATE_RESET                   = 0x00,    /*!< ADC not yet initialized or disabled */
159   HAL_ADC_STATE_READY                   = 0x01,    /*!< ADC peripheral ready for use */
160   HAL_ADC_STATE_BUSY                    = 0x02,    /*!< An internal process is ongoing */ 
161   HAL_ADC_STATE_BUSY_REG                = 0x12,    /*!< Regular conversion is ongoing */
162   HAL_ADC_STATE_BUSY_INJ                = 0x22,    /*!< Injected conversion is ongoing */
163   HAL_ADC_STATE_BUSY_INJ_REG            = 0x32,    /*!< Injected and regular conversion are ongoing */
164   HAL_ADC_STATE_TIMEOUT                 = 0x03,    /*!< Timeout state */
165   HAL_ADC_STATE_ERROR                   = 0x04,    /*!< ADC state error */
166   HAL_ADC_STATE_EOC                     = 0x05,    /*!< Conversion is completed */
167   HAL_ADC_STATE_EOC_REG                 = 0x15,    /*!< Regular conversion is completed */
168   HAL_ADC_STATE_EOC_INJ                 = 0x25,    /*!< Injected conversion is completed */
169   HAL_ADC_STATE_EOC_INJ_REG             = 0x35,    /*!< Injected and regular conversion are completed */
170   HAL_ADC_STATE_AWD                     = 0x06,    /*!< ADC state analog watchdog */
171   HAL_ADC_STATE_AWD2                    = 0x07,    /*!< Not used on STM32F1xx devices (kept for compatibility with other devices featuring several AWD) */
172   HAL_ADC_STATE_AWD3                    = 0x08,    /*!< Not used on STM32F1xx devices (kept for compatibility with other devices featuring several AWD) */ 
173 }HAL_ADC_StateTypeDef;
174
175 /** 
176   * @brief  ADC handle Structure definition  
177   */ 
178 typedef struct
179 {
180   ADC_TypeDef                   *Instance;              /*!< Register base address */
181
182   ADC_InitTypeDef               Init;                   /*!< ADC required parameters */
183
184   __IO uint32_t                 NbrOfConversionRank ;   /*!< ADC conversion rank counter */
185
186   DMA_HandleTypeDef             *DMA_Handle;            /*!< Pointer DMA Handler */
187
188   HAL_LockTypeDef               Lock;                   /*!< ADC locking object */
189
190   __IO HAL_ADC_StateTypeDef     State;                  /*!< ADC communication state */
191
192   __IO uint32_t                 ErrorCode;              /*!< ADC Error code */
193 }ADC_HandleTypeDef;
194 /**
195   * @}
196   */
197
198
199
200 /* Exported constants --------------------------------------------------------*/
201
202 /** @defgroup ADC_Exported_Constants ADC Exported Constants
203   * @{
204   */
205
206 /** @defgroup ADC_Error_Code ADC Error Code
207   * @{
208   */
209 #define HAL_ADC_ERROR_NONE        ((uint32_t)0x00)   /*!< No error                                              */
210 #define HAL_ADC_ERROR_INTERNAL    ((uint32_t)0x01)   /*!< ADC IP internal error: if problem of clocking, 
211                                                           enable/disable, erroneous state                       */
212 #define HAL_ADC_ERROR_OVR         ((uint32_t)0x02)   /*!< Overrun error                                         */
213 #define HAL_ADC_ERROR_DMA         ((uint32_t)0x04)   /*!< DMA transfer error                                    */
214
215 /**
216   * @}
217   */
218
219
220 /** @defgroup ADC_Data_align ADC data alignment
221   * @{
222   */
223 #define ADC_DATAALIGN_RIGHT      ((uint32_t)0x00000000)
224 #define ADC_DATAALIGN_LEFT       ((uint32_t)ADC_CR2_ALIGN)
225 /**
226   * @}
227   */
228
229 /** @defgroup ADC_Scan_mode ADC scan mode
230   * @{
231   */
232 /* Note: Scan mode values are not among binary choices ENABLE/DISABLE for     */
233 /*       compatibility with other STM32 devices having a sequencer with       */
234 /*       additional options.                                                  */
235 #define ADC_SCAN_DISABLE         ((uint32_t)0x00000000)
236 #define ADC_SCAN_ENABLE          ((uint32_t)ADC_CR1_SCAN)
237 /**
238   * @}
239   */
240
241 /** @defgroup ADC_External_trigger_edge_Regular ADC external trigger enable for regular group
242   * @{
243   */
244 #define ADC_EXTERNALTRIGCONVEDGE_NONE           ((uint32_t)0x00000000)
245 #define ADC_EXTERNALTRIGCONVEDGE_RISING         ((uint32_t)ADC_CR2_EXTTRIG)
246 /**
247   * @}
248   */
249
250 /** @defgroup ADC_channels ADC channels
251   * @{
252   */
253 /* Note: Depending on devices, some channels may not be available on package  */
254 /*       pins. Refer to device datasheet for channels availability.           */
255 #define ADC_CHANNEL_0           ((uint32_t)0x00000000)                                                                          
256 #define ADC_CHANNEL_1           ((uint32_t)(                                                                    ADC_SQR3_SQ1_0))
257 #define ADC_CHANNEL_2           ((uint32_t)(                                                   ADC_SQR3_SQ1_1                 ))
258 #define ADC_CHANNEL_3           ((uint32_t)(                                                   ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))
259 #define ADC_CHANNEL_4           ((uint32_t)(                                  ADC_SQR3_SQ1_2                                  ))
260 #define ADC_CHANNEL_5           ((uint32_t)(                                  ADC_SQR3_SQ1_2                  | ADC_SQR3_SQ1_0))
261 #define ADC_CHANNEL_6           ((uint32_t)(                                  ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1                 ))
262 #define ADC_CHANNEL_7           ((uint32_t)(                                  ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))
263 #define ADC_CHANNEL_8           ((uint32_t)(                 ADC_SQR3_SQ1_3                                                   ))
264 #define ADC_CHANNEL_9           ((uint32_t)(                 ADC_SQR3_SQ1_3                                   | ADC_SQR3_SQ1_0))
265 #define ADC_CHANNEL_10          ((uint32_t)(                 ADC_SQR3_SQ1_3                  | ADC_SQR3_SQ1_1                 ))
266 #define ADC_CHANNEL_11          ((uint32_t)(                 ADC_SQR3_SQ1_3                  | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))
267 #define ADC_CHANNEL_12          ((uint32_t)(                 ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2                                  ))
268 #define ADC_CHANNEL_13          ((uint32_t)(                 ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2                  | ADC_SQR3_SQ1_0))
269 #define ADC_CHANNEL_14          ((uint32_t)(                 ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1                 ))
270 #define ADC_CHANNEL_15          ((uint32_t)(                 ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))
271 #define ADC_CHANNEL_16          ((uint32_t)(ADC_SQR3_SQ1_4                                                                    ))
272 #define ADC_CHANNEL_17          ((uint32_t)(ADC_SQR3_SQ1_4                                                    | ADC_SQR3_SQ1_0))
273
274 #define ADC_CHANNEL_TEMPSENSOR  ADC_CHANNEL_16  /* ADC internal channel (no connection on device pin) */
275 #define ADC_CHANNEL_VREFINT     ADC_CHANNEL_17  /* ADC internal channel (no connection on device pin) */
276 /**
277   * @}
278   */
279
280 /** @defgroup ADC_sampling_times ADC sampling times
281   * @{
282   */
283 #define ADC_SAMPLETIME_1CYCLE_5       ((uint32_t)0x00000000)                                               /*!< Sampling time 1.5 ADC clock cycle */
284 #define ADC_SAMPLETIME_7CYCLES_5      ((uint32_t)(                                      ADC_SMPR2_SMP0_0)) /*!< Sampling time 7.5 ADC clock cycles */
285 #define ADC_SAMPLETIME_13CYCLES_5     ((uint32_t)(                   ADC_SMPR2_SMP0_1                   )) /*!< Sampling time 13.5 ADC clock cycles */
286 #define ADC_SAMPLETIME_28CYCLES_5     ((uint32_t)(                   ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0)) /*!< Sampling time 28.5 ADC clock cycles */
287 #define ADC_SAMPLETIME_41CYCLES_5     ((uint32_t)(ADC_SMPR2_SMP0_2                                      )) /*!< Sampling time 41.5 ADC clock cycles */
288 #define ADC_SAMPLETIME_55CYCLES_5     ((uint32_t)(ADC_SMPR2_SMP0_2                    | ADC_SMPR2_SMP0_0)) /*!< Sampling time 55.5 ADC clock cycles */
289 #define ADC_SAMPLETIME_71CYCLES_5     ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1                   )) /*!< Sampling time 71.5 ADC clock cycles */
290 #define ADC_SAMPLETIME_239CYCLES_5    ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0)) /*!< Sampling time 239.5 ADC clock cycles */
291 /**
292   * @}
293   */
294
295 /** @defgroup ADC_regular_rank ADC rank into regular group
296   * @{
297   */
298 #define ADC_REGULAR_RANK_1    ((uint32_t)0x00000001)
299 #define ADC_REGULAR_RANK_2    ((uint32_t)0x00000002)
300 #define ADC_REGULAR_RANK_3    ((uint32_t)0x00000003)
301 #define ADC_REGULAR_RANK_4    ((uint32_t)0x00000004)
302 #define ADC_REGULAR_RANK_5    ((uint32_t)0x00000005)
303 #define ADC_REGULAR_RANK_6    ((uint32_t)0x00000006)
304 #define ADC_REGULAR_RANK_7    ((uint32_t)0x00000007)
305 #define ADC_REGULAR_RANK_8    ((uint32_t)0x00000008)
306 #define ADC_REGULAR_RANK_9    ((uint32_t)0x00000009)
307 #define ADC_REGULAR_RANK_10   ((uint32_t)0x0000000A)
308 #define ADC_REGULAR_RANK_11   ((uint32_t)0x0000000B)
309 #define ADC_REGULAR_RANK_12   ((uint32_t)0x0000000C)
310 #define ADC_REGULAR_RANK_13   ((uint32_t)0x0000000D)
311 #define ADC_REGULAR_RANK_14   ((uint32_t)0x0000000E)
312 #define ADC_REGULAR_RANK_15   ((uint32_t)0x0000000F)
313 #define ADC_REGULAR_RANK_16   ((uint32_t)0x00000010)
314 /**
315   * @}
316   */
317
318 /** @defgroup ADC_analog_watchdog_mode ADC analog watchdog mode
319   * @{
320   */
321 #define ADC_ANALOGWATCHDOG_NONE                 ((uint32_t)0x00000000)
322 #define ADC_ANALOGWATCHDOG_SINGLE_REG           ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN))
323 #define ADC_ANALOGWATCHDOG_SINGLE_INJEC         ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN))
324 #define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC      ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN))
325 #define ADC_ANALOGWATCHDOG_ALL_REG              ((uint32_t) ADC_CR1_AWDEN)
326 #define ADC_ANALOGWATCHDOG_ALL_INJEC            ((uint32_t) ADC_CR1_JAWDEN)
327 #define ADC_ANALOGWATCHDOG_ALL_REGINJEC         ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN))
328 /**
329   * @}
330   */
331
332 /** @defgroup ADC_conversion_group ADC conversion group
333   * @{
334   */
335 #define ADC_REGULAR_GROUP             ((uint32_t)(ADC_FLAG_EOC))
336 #define ADC_INJECTED_GROUP            ((uint32_t)(ADC_FLAG_JEOC))
337 #define ADC_REGULAR_INJECTED_GROUP    ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_JEOC))
338 /**
339   * @}
340   */
341
342 /** @defgroup ADC_Event_type ADC Event type
343   * @{
344   */
345 #define ADC_AWD_EVENT               ((uint32_t)ADC_FLAG_AWD)   /*!< ADC Analog watchdog event */
346
347 #define ADC_AWD1_EVENT              ADC_AWD_EVENT              /*!< ADC Analog watchdog 1 event: Alternate naming for compatibility with other STM32 devices having several analog watchdogs */
348 /**
349   * @}
350   */
351
352 /** @defgroup ADC_interrupts_definition ADC interrupts definition
353   * @{
354   */
355 #define ADC_IT_EOC           ADC_CR1_EOCIE        /*!< ADC End of Regular Conversion interrupt source */
356 #define ADC_IT_JEOC          ADC_CR1_JEOCIE       /*!< ADC End of Injected Conversion interrupt source */
357 #define ADC_IT_AWD           ADC_CR1_AWDIE        /*!< ADC Analog watchdog interrupt source */
358 /**
359   * @}
360   */
361
362 /** @defgroup ADC_flags_definition ADC flags definition
363   * @{
364   */
365 #define ADC_FLAG_STRT          ADC_SR_STRT     /*!< ADC Regular group start flag */
366 #define ADC_FLAG_JSTRT         ADC_SR_JSTRT    /*!< ADC Injected group start flag */
367 #define ADC_FLAG_EOC           ADC_SR_EOC      /*!< ADC End of Regular conversion flag */
368 #define ADC_FLAG_JEOC          ADC_SR_JEOC     /*!< ADC End of Injected conversion flag */
369 #define ADC_FLAG_AWD           ADC_SR_AWD      /*!< ADC Analog watchdog flag */
370 /**
371   * @}
372   */
373
374
375 /**
376   * @}
377   */ 
378
379 /* Private constants ---------------------------------------------------------*/
380
381 /** @addtogroup ADC_Private_Constants ADC Private Constants
382   * @{
383   */
384
385 /** @defgroup ADC_conversion_cycles ADC conversion cycles
386   * @{
387   */
388 /* ADC conversion cycles (unit: ADC clock cycles)                           */
389 /* (selected sampling time + conversion time of 12.5 ADC clock cycles, with */
390 /* resolution 12 bits)                                                      */
391 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_1CYCLE5    ((uint32_t) 14)
392 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5   ((uint32_t) 20)
393 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_13CYCLES5  ((uint32_t) 26)
394 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5  ((uint32_t) 41)
395 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_41CYCLES5  ((uint32_t) 54)
396 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_55CYCLES5  ((uint32_t) 68)
397 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5  ((uint32_t) 84)
398 #define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5 ((uint32_t)252)
399 /**
400   * @}
401   */
402
403 /** @defgroup ADC_sampling_times_all_channels ADC sampling times all channels
404   * @{
405   */
406 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2                                          \
407      (ADC_SMPR2_SMP9_2 | ADC_SMPR2_SMP8_2 | ADC_SMPR2_SMP7_2 | ADC_SMPR2_SMP6_2 |     \
408       ADC_SMPR2_SMP5_2 | ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP3_2 | ADC_SMPR2_SMP2_2 |     \
409       ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP0_2)
410 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2                                          \
411      (ADC_SMPR1_SMP17_2 | ADC_SMPR1_SMP16_2 | ADC_SMPR1_SMP15_2 | ADC_SMPR1_SMP14_2 | \
412       ADC_SMPR1_SMP13_2 | ADC_SMPR1_SMP12_2 | ADC_SMPR1_SMP11_2 | ADC_SMPR1_SMP10_2 )
413
414 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1                                          \
415      (ADC_SMPR2_SMP9_1 | ADC_SMPR2_SMP8_1 | ADC_SMPR2_SMP7_1 | ADC_SMPR2_SMP6_1 |     \
416       ADC_SMPR2_SMP5_1 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP3_1 | ADC_SMPR2_SMP2_1 |     \
417       ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP0_1)
418 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1                                          \
419      (ADC_SMPR1_SMP17_1 | ADC_SMPR1_SMP16_1 | ADC_SMPR1_SMP15_1 | ADC_SMPR1_SMP14_1 | \
420       ADC_SMPR1_SMP13_1 | ADC_SMPR1_SMP12_1 | ADC_SMPR1_SMP11_1 | ADC_SMPR1_SMP10_1 )
421
422 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0                                          \
423      (ADC_SMPR2_SMP9_0 | ADC_SMPR2_SMP8_0 | ADC_SMPR2_SMP7_0 | ADC_SMPR2_SMP6_0 |     \
424       ADC_SMPR2_SMP5_0 | ADC_SMPR2_SMP4_0 | ADC_SMPR2_SMP3_0 | ADC_SMPR2_SMP2_0 |     \
425       ADC_SMPR2_SMP1_0 | ADC_SMPR2_SMP0_0)
426 #define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0                                          \
427      (ADC_SMPR1_SMP17_0 | ADC_SMPR1_SMP16_0 | ADC_SMPR1_SMP15_0 | ADC_SMPR1_SMP14_0 | \
428       ADC_SMPR1_SMP13_0 | ADC_SMPR1_SMP12_0 | ADC_SMPR1_SMP11_0 | ADC_SMPR1_SMP10_0 )
429
430 #define ADC_SAMPLETIME_1CYCLE5_SMPR2ALLCHANNELS    ((uint32_t)0x00000000)
431 #define ADC_SAMPLETIME_7CYCLES5_SMPR2ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)
432 #define ADC_SAMPLETIME_13CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)
433 #define ADC_SAMPLETIME_28CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)
434 #define ADC_SAMPLETIME_41CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2)
435 #define ADC_SAMPLETIME_55CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)
436 #define ADC_SAMPLETIME_71CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)
437 #define ADC_SAMPLETIME_239CYCLES5_SMPR2ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)
438
439 #define ADC_SAMPLETIME_1CYCLE5_SMPR1ALLCHANNELS    ((uint32_t)0x00000000)
440 #define ADC_SAMPLETIME_7CYCLES5_SMPR1ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)
441 #define ADC_SAMPLETIME_13CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)
442 #define ADC_SAMPLETIME_28CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)
443 #define ADC_SAMPLETIME_41CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2)
444 #define ADC_SAMPLETIME_55CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)
445 #define ADC_SAMPLETIME_71CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)
446 #define ADC_SAMPLETIME_239CYCLES5_SMPR1ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)
447 /**
448   * @}
449   */
450
451 /* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx */
452 #define ADC_FLAG_POSTCONV_ALL   (ADC_FLAG_EOC | ADC_FLAG_JEOC | ADC_FLAG_AWD )
453
454 /**
455   * @}
456   */
457
458
459 /* Exported macro ------------------------------------------------------------*/
460
461 /** @defgroup ADC_Exported_Macros ADC Exported Macros
462   * @{
463   */
464 /* Macro for internal HAL driver usage, and possibly can be used into code of */
465 /* final user.                                                                */    
466
467 /**
468   * @brief Enable the ADC peripheral
469   * @note ADC enable requires a delay for ADC stabilization time
470   *       (refer to device datasheet, parameter tSTAB)
471   * @note On STM32F1, if ADC is already enabled this macro trigs a conversion 
472   *       SW start on regular group.
473   * @param __HANDLE__: ADC handle
474   * @retval None
475   */
476 #define __HAL_ADC_ENABLE(__HANDLE__)                                           \
477   (SET_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))
478     
479 /**
480   * @brief Disable the ADC peripheral
481   * @param __HANDLE__: ADC handle
482   * @retval None
483   */
484 #define __HAL_ADC_DISABLE(__HANDLE__)                                          \
485   (CLEAR_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))
486     
487 /** @brief Enable the ADC end of conversion interrupt.
488   * @param __HANDLE__: ADC handle
489   * @param __INTERRUPT__: ADC Interrupt
490   *          This parameter can be any combination of the following values:
491   *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source
492   *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source
493   *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source
494   * @retval None
495   */
496 #define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__)                         \
497   (SET_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))
498     
499 /** @brief Disable the ADC end of conversion interrupt.
500   * @param __HANDLE__: ADC handle
501   * @param __INTERRUPT__: ADC Interrupt
502   *          This parameter can be any combination of the following values:
503   *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source
504   *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source
505   *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source
506   * @retval None
507   */
508 #define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__)                        \
509   (CLEAR_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))
510
511 /** @brief  Checks if the specified ADC interrupt source is enabled or disabled.
512   * @param __HANDLE__: ADC handle
513   * @param __INTERRUPT__: ADC interrupt source to check
514   *          This parameter can be any combination of the following values:
515   *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source
516   *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source
517   *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source
518   * @retval None
519   */
520 #define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)                     \
521   (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__))
522
523 /** @brief Get the selected ADC's flag status.
524   * @param __HANDLE__: ADC handle
525   * @param __FLAG__: ADC flag
526   *          This parameter can be any combination of the following values:
527   *            @arg ADC_FLAG_STRT: ADC Regular group start flag
528   *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag
529   *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag
530   *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag
531   *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag
532   * @retval None
533   */
534 #define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__)                               \
535   ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
536     
537 /** @brief Clear the ADC's pending flags
538   * @param __HANDLE__: ADC handle
539   * @param __FLAG__: ADC flag
540   *          This parameter can be any combination of the following values:
541   *            @arg ADC_FLAG_STRT: ADC Regular group start flag
542   *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag
543   *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag
544   *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag
545   *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag
546   * @retval None
547   */
548 #define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__)                             \
549   (CLEAR_BIT((__HANDLE__)->Instance->SR, (__FLAG__)))
550
551 /** @brief  Reset ADC handle state
552   * @param  __HANDLE__: ADC handle
553   * @retval None
554   */
555 #define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__)                               \
556   ((__HANDLE__)->State = HAL_ADC_STATE_RESET)
557
558 /**
559   * @}
560   */
561
562 /* Private macro ------------------------------------------------------------*/
563
564 /** @defgroup ADC_Private_Macros ADC Private Macros
565   * @{
566   */
567 /* Macro reserved for internal HAL driver usage, not intended to be used in   */
568 /* code of final user.                                                        */
569
570 /**
571   * @brief Verification of ADC state: enabled or disabled
572   * @param __HANDLE__: ADC handle
573   * @retval SET (ADC enabled) or RESET (ADC disabled)
574   */
575 #define ADC_IS_ENABLE(__HANDLE__)                                              \
576   ((( ((__HANDLE__)->Instance->CR2 & ADC_CR2_ADON) == ADC_CR2_ADON )           \
577    ) ? SET : RESET)
578
579 /**
580   * @brief Test if conversion trigger of regular group is software start
581   *        or external trigger.
582   * @param __HANDLE__: ADC handle
583   * @retval SET (software start) or RESET (external trigger)
584   */
585 #define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__)                              \
586   (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_EXTSEL) == ADC_SOFTWARE_START)
587
588 /**
589   * @brief Test if conversion trigger of injected group is software start
590   *        or external trigger.
591   * @param __HANDLE__: ADC handle
592   * @retval SET (software start) or RESET (external trigger)
593   */
594 #define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__)                             \
595   (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_JEXTSEL) == ADC_INJECTED_SOFTWARE_START)
596     
597 /**
598   * @brief Clear ADC error code (set it to error code: "no error")
599   * @param __HANDLE__: ADC handle
600   * @retval None
601   */
602 #define ADC_CLEAR_ERRORCODE(__HANDLE__)                                        \
603   ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)
604     
605 /**
606   * @brief Set ADC number of conversions into regular channel sequence length.
607   * @param _NbrOfConversion_: Regular channel sequence length 
608   * @retval None
609   */
610 #define ADC_SQR1_L_SHIFT(_NbrOfConversion_)                                    \
611   (((_NbrOfConversion_) - (uint8_t)1) << POSITION_VAL(ADC_SQR1_L))
612
613 /**
614   * @brief Set the ADC's sample time for channel numbers between 10 and 18.
615   * @param _SAMPLETIME_: Sample time parameter.
616   * @param _CHANNELNB_: Channel number.  
617   * @retval None
618   */
619 #define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_)                                   \
620   ((_SAMPLETIME_) << (POSITION_VAL(ADC_SMPR1_SMP11) * ((_CHANNELNB_) - 10)))
621
622 /**
623   * @brief Set the ADC's sample time for channel numbers between 0 and 9.
624   * @param _SAMPLETIME_: Sample time parameter.
625   * @param _CHANNELNB_: Channel number.  
626   * @retval None
627   */
628 #define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_)                                   \
629   ((_SAMPLETIME_) << (POSITION_VAL(ADC_SMPR2_SMP1) * (_CHANNELNB_)))
630
631 /**
632   * @brief Set the selected regular channel rank for rank between 1 and 6.
633   * @param _CHANNELNB_: Channel number.
634   * @param _RANKNB_: Rank number.    
635   * @retval None
636   */
637 #define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_)                                     \
638   ((_CHANNELNB_) << (POSITION_VAL(ADC_SQR3_SQ2) * ((_RANKNB_) - 1)))
639
640 /**
641   * @brief Set the selected regular channel rank for rank between 7 and 12.
642   * @param _CHANNELNB_: Channel number.
643   * @param _RANKNB_: Rank number.    
644   * @retval None
645   */
646 #define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_)                                     \
647   ((_CHANNELNB_) << (POSITION_VAL(ADC_SQR2_SQ8) * ((_RANKNB_) - 7)))
648
649 /**
650   * @brief Set the selected regular channel rank for rank between 13 and 16.
651   * @param _CHANNELNB_: Channel number.
652   * @param _RANKNB_: Rank number.    
653   * @retval None
654   */
655 #define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_)                                     \
656   ((_CHANNELNB_) << (POSITION_VAL(ADC_SQR1_SQ14) * ((_RANKNB_) - 13)))
657
658 /**
659   * @brief Set the injected sequence length.
660   * @param _JSQR_JL_: Sequence length.
661   * @retval None
662   */
663 #define ADC_JSQR_JL_SHIFT(_JSQR_JL_)                                           \
664   (((_JSQR_JL_) -1) << POSITION_VAL(ADC_JSQR_JL))
665
666 /**
667   * @brief Set the selected injected channel rank
668   *        Note: on STM32F1 devices, channel rank position in JSQR register
669   *              is depending on total number of ranks selected into
670   *              injected sequencer (ranks sequence starting from 4-JL)
671   * @param _CHANNELNB_: Channel number.
672   * @param _RANKNB_: Rank number.
673   * @param _JSQR_JL_: Sequence length.
674   * @retval None
675   */
676 #define ADC_JSQR_RK_JL(_CHANNELNB_, _RANKNB_, _JSQR_JL_)                       \
677   ((_CHANNELNB_) << (POSITION_VAL(ADC_JSQR_JSQ2) * ((4 - ((_JSQR_JL_) - (_RANKNB_))) - 1)))
678
679 /**
680   * @brief Enable ADC continuous conversion mode.
681   * @param _CONTINUOUS_MODE_: Continuous mode.
682   * @retval None
683   */
684 #define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_)                                  \
685   ((_CONTINUOUS_MODE_) << POSITION_VAL(ADC_CR2_CONT))
686
687 /**
688   * @brief Configures the number of discontinuous conversions for the regular group channels.
689   * @param _NBR_DISCONTINUOUS_CONV_: Number of discontinuous conversions.
690   * @retval None
691   */
692 #define ADC_CR1_DISCONTINUOUS_NUM(_NBR_DISCONTINUOUS_CONV_)                    \
693   (((_NBR_DISCONTINUOUS_CONV_) - 1) << POSITION_VAL(ADC_CR1_DISCNUM))
694
695 /**
696   * @brief Enable ADC scan mode to convert multiple ranks with sequencer.
697   * @param _SCAN_MODE_: Scan conversion mode.
698   * @retval None
699   */
700 /* Note: Scan mode is compared to ENABLE for legacy purpose, this parameter   */
701 /*       is equivalent to ADC_SCAN_ENABLE.                                    */
702 #define ADC_CR1_SCAN_SET(_SCAN_MODE_)                                          \
703   (( ((_SCAN_MODE_) == ADC_SCAN_ENABLE) || ((_SCAN_MODE_) == ENABLE)           \
704    )? (ADC_SCAN_ENABLE) : (ADC_SCAN_DISABLE)                                   \
705   )
706
707 /**
708   * @brief Get the maximum ADC conversion cycles on all channels.
709   * Returns the selected sampling time + conversion time (12.5 ADC clock cycles)
710   * Approximation of sampling time within 4 ranges, returns the highest value:
711   *   below 7.5 cycles {1.5 cycle; 7.5 cycles},
712   *   between 13.5 cycles and 28.5 cycles {13.5 cycles; 28.5 cycles}
713   *   between 41.5 cycles and 71.5 cycles {41.5 cycles; 55.5 cycles; 71.5cycles}
714   *   equal to 239.5 cycles
715   * Unit: ADC clock cycles
716   * @param __HANDLE__: ADC handle
717   * @retval ADC conversion cycles on all channels
718   */   
719 #define ADC_CONVCYCLES_MAX_RANGE(__HANDLE__)                                                                     \
720     (( (((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2) == RESET)  &&                     \
721        (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2) == RESET) ) ?                     \
722                                                                                                                  \
723           (( (((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET)  &&               \
724              (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET) ) ?               \
725                ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5 : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5)   \
726           :                                                                                                      \
727           ((((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET)  &&               \
728              (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET)) ||               \
729             ((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET)  &&               \
730              (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET))) ?               \
731                ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5 : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5) \
732      )
733
734 #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || \
735                                   ((ALIGN) == ADC_DATAALIGN_LEFT)    )
736
737 #define IS_ADC_SCAN_MODE(SCAN_MODE) (((SCAN_MODE) == ADC_SCAN_DISABLE) || \
738                                      ((SCAN_MODE) == ADC_SCAN_ENABLE)    )
739
740 #define IS_ADC_EXTTRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE)  || \
741                                    ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING)  )
742
743 #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_CHANNEL_0)           || \
744                                  ((CHANNEL) == ADC_CHANNEL_1)           || \
745                                  ((CHANNEL) == ADC_CHANNEL_2)           || \
746                                  ((CHANNEL) == ADC_CHANNEL_3)           || \
747                                  ((CHANNEL) == ADC_CHANNEL_4)           || \
748                                  ((CHANNEL) == ADC_CHANNEL_5)           || \
749                                  ((CHANNEL) == ADC_CHANNEL_6)           || \
750                                  ((CHANNEL) == ADC_CHANNEL_7)           || \
751                                  ((CHANNEL) == ADC_CHANNEL_8)           || \
752                                  ((CHANNEL) == ADC_CHANNEL_9)           || \
753                                  ((CHANNEL) == ADC_CHANNEL_10)          || \
754                                  ((CHANNEL) == ADC_CHANNEL_11)          || \
755                                  ((CHANNEL) == ADC_CHANNEL_12)          || \
756                                  ((CHANNEL) == ADC_CHANNEL_13)          || \
757                                  ((CHANNEL) == ADC_CHANNEL_14)          || \
758                                  ((CHANNEL) == ADC_CHANNEL_15)          || \
759                                  ((CHANNEL) == ADC_CHANNEL_16)          || \
760                                  ((CHANNEL) == ADC_CHANNEL_17)            )
761
762 #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SAMPLETIME_1CYCLE_5)    || \
763                                   ((TIME) == ADC_SAMPLETIME_7CYCLES_5)   || \
764                                   ((TIME) == ADC_SAMPLETIME_13CYCLES_5)  || \
765                                   ((TIME) == ADC_SAMPLETIME_28CYCLES_5)  || \
766                                   ((TIME) == ADC_SAMPLETIME_41CYCLES_5)  || \
767                                   ((TIME) == ADC_SAMPLETIME_55CYCLES_5)  || \
768                                   ((TIME) == ADC_SAMPLETIME_71CYCLES_5)  || \
769                                   ((TIME) == ADC_SAMPLETIME_239CYCLES_5)   )
770
771 #define IS_ADC_REGULAR_RANK(CHANNEL) (((CHANNEL) == ADC_REGULAR_RANK_1 ) || \
772                                       ((CHANNEL) == ADC_REGULAR_RANK_2 ) || \
773                                       ((CHANNEL) == ADC_REGULAR_RANK_3 ) || \
774                                       ((CHANNEL) == ADC_REGULAR_RANK_4 ) || \
775                                       ((CHANNEL) == ADC_REGULAR_RANK_5 ) || \
776                                       ((CHANNEL) == ADC_REGULAR_RANK_6 ) || \
777                                       ((CHANNEL) == ADC_REGULAR_RANK_7 ) || \
778                                       ((CHANNEL) == ADC_REGULAR_RANK_8 ) || \
779                                       ((CHANNEL) == ADC_REGULAR_RANK_9 ) || \
780                                       ((CHANNEL) == ADC_REGULAR_RANK_10) || \
781                                       ((CHANNEL) == ADC_REGULAR_RANK_11) || \
782                                       ((CHANNEL) == ADC_REGULAR_RANK_12) || \
783                                       ((CHANNEL) == ADC_REGULAR_RANK_13) || \
784                                       ((CHANNEL) == ADC_REGULAR_RANK_14) || \
785                                       ((CHANNEL) == ADC_REGULAR_RANK_15) || \
786                                       ((CHANNEL) == ADC_REGULAR_RANK_16)   )
787
788 #define IS_ADC_ANALOG_WATCHDOG_MODE(WATCHDOG) (((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE)             || \
789                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG)       || \
790                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC)     || \
791                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC)  || \
792                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG)          || \
793                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC)        || \
794                                                ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC)       )
795
796 #define IS_ADC_CONVERSION_GROUP(CONVERSION) (((CONVERSION) == ADC_REGULAR_GROUP)         || \
797                                              ((CONVERSION) == ADC_INJECTED_GROUP)        || \
798                                              ((CONVERSION) == ADC_REGULAR_INJECTED_GROUP)  )
799
800 #define IS_ADC_EVENT_TYPE(EVENT) ((EVENT) == ADC_AWD_EVENT)
801
802
803 /** @defgroup ADC_range_verification ADC range verification
804   * For a unique ADC resolution: 12 bits
805   * @{
806   */
807 #define IS_ADC_RANGE(ADC_VALUE) ((ADC_VALUE) <= ((uint32_t)0x0FFF))
808 /**
809   * @}
810   */
811
812 /** @defgroup ADC_regular_nb_conv_verification ADC regular nb conv verification
813   * @{
814   */
815 #define IS_ADC_REGULAR_NB_CONV(LENGTH) (((LENGTH) >= ((uint32_t)1)) && ((LENGTH) <= ((uint32_t)16)))
816 /**
817   * @}
818   */
819
820 /** @defgroup ADC_regular_discontinuous_mode_number_verification ADC regular discontinuous mode number verification
821   * @{
822   */
823 #define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= ((uint32_t)1)) && ((NUMBER) <= ((uint32_t)8)))
824 /**
825   * @}
826   */   
827       
828 /**
829   * @}
830   */
831     
832 /* Include ADC HAL Extension module */
833 #include "stm32f1xx_hal_adc_ex.h"
834
835 /* Exported functions --------------------------------------------------------*/
836 /** @addtogroup ADC_Exported_Functions
837   * @{
838   */
839
840 /** @addtogroup ADC_Exported_Functions_Group1
841   * @{
842   */
843
844
845 /* Initialization and de-initialization functions  **********************************/
846 HAL_StatusTypeDef       HAL_ADC_Init(ADC_HandleTypeDef* hadc);
847 HAL_StatusTypeDef       HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);
848 void                    HAL_ADC_MspInit(ADC_HandleTypeDef* hadc);
849 void                    HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc);
850 /**
851   * @}
852   */
853
854 /* IO operation functions  *****************************************************/
855
856 /** @addtogroup ADC_Exported_Functions_Group2
857   * @{
858   */
859
860
861 /* Blocking mode: Polling */
862 HAL_StatusTypeDef       HAL_ADC_Start(ADC_HandleTypeDef* hadc);
863 HAL_StatusTypeDef       HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
864 HAL_StatusTypeDef       HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
865 HAL_StatusTypeDef       HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout);
866
867 /* Non-blocking mode: Interruption */
868 HAL_StatusTypeDef       HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
869 HAL_StatusTypeDef       HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
870
871 /* Non-blocking mode: DMA */
872 HAL_StatusTypeDef       HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
873 HAL_StatusTypeDef       HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
874
875 /* ADC retrieve conversion value intended to be used with polling or interruption */
876 uint32_t                HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
877
878 /* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption and DMA) */
879 void                    HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);
880 void                    HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
881 void                    HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);
882 void                    HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc);
883 void                    HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);
884 /**
885   * @}
886   */
887
888
889 /* Peripheral Control functions ***********************************************/
890 /** @addtogroup ADC_Exported_Functions_Group3
891   * @{
892   */
893 HAL_StatusTypeDef       HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig);
894 HAL_StatusTypeDef       HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig);
895 /**
896   * @}
897   */
898
899
900 /* Peripheral State functions *************************************************/
901 /** @addtogroup ADC_Exported_Functions_Group4
902   * @{
903   */
904 HAL_ADC_StateTypeDef    HAL_ADC_GetState(ADC_HandleTypeDef* hadc);
905 uint32_t                HAL_ADC_GetError(ADC_HandleTypeDef *hadc);
906 /**
907   * @}
908   */
909
910
911 /**
912   * @}
913   */
914
915
916 /* Internal HAL driver functions **********************************************/
917 /** @addtogroup ADC_Private_Functions
918   * @{
919   */
920 HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc);
921 HAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef* hadc);
922 void              ADC_StabilizationTime(uint32_t DelayUs);
923 void              ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);
924 void              ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma);
925 void              ADC_DMAError(DMA_HandleTypeDef *hdma);
926 /**
927   * @}
928   */ 
929
930
931 /**
932   * @}
933   */ 
934
935 /**
936   * @}
937   */
938
939 #ifdef __cplusplus
940 }
941 #endif
942
943
944 #endif /* __STM32F1xx_HAL_ADC_H */
945
946 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/