inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /**
NYX 0:85b3fd62ea1a 2 ******************************************************************************
NYX 0:85b3fd62ea1a 3 * @file stm32f4xx_hal_adc.h
NYX 0:85b3fd62ea1a 4 * @author MCD Application Team
NYX 0:85b3fd62ea1a 5 * @version V1.7.1
NYX 0:85b3fd62ea1a 6 * @date 14-April-2017
NYX 0:85b3fd62ea1a 7 * @brief Header file containing functions prototypes of ADC HAL library.
NYX 0:85b3fd62ea1a 8 ******************************************************************************
NYX 0:85b3fd62ea1a 9 * @attention
NYX 0:85b3fd62ea1a 10 *
NYX 0:85b3fd62ea1a 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
NYX 0:85b3fd62ea1a 12 *
NYX 0:85b3fd62ea1a 13 * Redistribution and use in source and binary forms, with or without modification,
NYX 0:85b3fd62ea1a 14 * are permitted provided that the following conditions are met:
NYX 0:85b3fd62ea1a 15 * 1. Redistributions of source code must retain the above copyright notice,
NYX 0:85b3fd62ea1a 16 * this list of conditions and the following disclaimer.
NYX 0:85b3fd62ea1a 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
NYX 0:85b3fd62ea1a 18 * this list of conditions and the following disclaimer in the documentation
NYX 0:85b3fd62ea1a 19 * and/or other materials provided with the distribution.
NYX 0:85b3fd62ea1a 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
NYX 0:85b3fd62ea1a 21 * may be used to endorse or promote products derived from this software
NYX 0:85b3fd62ea1a 22 * without specific prior written permission.
NYX 0:85b3fd62ea1a 23 *
NYX 0:85b3fd62ea1a 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
NYX 0:85b3fd62ea1a 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
NYX 0:85b3fd62ea1a 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
NYX 0:85b3fd62ea1a 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
NYX 0:85b3fd62ea1a 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
NYX 0:85b3fd62ea1a 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
NYX 0:85b3fd62ea1a 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
NYX 0:85b3fd62ea1a 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
NYX 0:85b3fd62ea1a 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
NYX 0:85b3fd62ea1a 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NYX 0:85b3fd62ea1a 34 *
NYX 0:85b3fd62ea1a 35 ******************************************************************************
NYX 0:85b3fd62ea1a 36 */
NYX 0:85b3fd62ea1a 37
NYX 0:85b3fd62ea1a 38 /* Define to prevent recursive inclusion -------------------------------------*/
NYX 0:85b3fd62ea1a 39 #ifndef __STM32F4xx_ADC_H
NYX 0:85b3fd62ea1a 40 #define __STM32F4xx_ADC_H
NYX 0:85b3fd62ea1a 41
NYX 0:85b3fd62ea1a 42 #ifdef __cplusplus
NYX 0:85b3fd62ea1a 43 extern "C" {
NYX 0:85b3fd62ea1a 44 #endif
NYX 0:85b3fd62ea1a 45
NYX 0:85b3fd62ea1a 46 /* Includes ------------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 47 #include "stm32f4xx_hal_def.h"
NYX 0:85b3fd62ea1a 48
NYX 0:85b3fd62ea1a 49 /** @addtogroup STM32F4xx_HAL_Driver
NYX 0:85b3fd62ea1a 50 * @{
NYX 0:85b3fd62ea1a 51 */
NYX 0:85b3fd62ea1a 52
NYX 0:85b3fd62ea1a 53 /** @addtogroup ADC
NYX 0:85b3fd62ea1a 54 * @{
NYX 0:85b3fd62ea1a 55 */
NYX 0:85b3fd62ea1a 56
NYX 0:85b3fd62ea1a 57 /* Exported types ------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 58 /** @defgroup ADC_Exported_Types ADC Exported Types
NYX 0:85b3fd62ea1a 59 * @{
NYX 0:85b3fd62ea1a 60 */
NYX 0:85b3fd62ea1a 61
NYX 0:85b3fd62ea1a 62 /**
NYX 0:85b3fd62ea1a 63 * @brief Structure definition of ADC and regular group initialization
NYX 0:85b3fd62ea1a 64 * @note Parameters of this structure are shared within 2 scopes:
NYX 0:85b3fd62ea1a 65 * - Scope entire ADC (affects regular and injected groups): ClockPrescaler, Resolution, ScanConvMode, DataAlign, ScanConvMode, EOCSelection, LowPowerAutoWait, LowPowerAutoPowerOff, ChannelsBank.
NYX 0:85b3fd62ea1a 66 * - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv.
NYX 0:85b3fd62ea1a 67 * @note The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.
NYX 0:85b3fd62ea1a 68 * ADC state can be either:
NYX 0:85b3fd62ea1a 69 * - For all parameters: ADC disabled
NYX 0:85b3fd62ea1a 70 * - For all parameters except 'Resolution', 'ScanConvMode', 'DiscontinuousConvMode', 'NbrOfDiscConversion' : ADC enabled without conversion on going on regular group.
NYX 0:85b3fd62ea1a 71 * - For parameters 'ExternalTrigConv' and 'ExternalTrigConvEdge': ADC enabled, even with conversion on going.
NYX 0:85b3fd62ea1a 72 * If ADC is not in the appropriate state to modify some parameters, these parameters setting is bypassed
NYX 0:85b3fd62ea1a 73 * without error reporting (as it can be the expected behaviour in case of intended action to update another parameter (which fulfills the ADC state condition) on the fly).
NYX 0:85b3fd62ea1a 74 */
NYX 0:85b3fd62ea1a 75 typedef struct
NYX 0:85b3fd62ea1a 76 {
NYX 0:85b3fd62ea1a 77 uint32_t ClockPrescaler; /*!< Select ADC clock prescaler. The clock is common for
NYX 0:85b3fd62ea1a 78 all the ADCs.
NYX 0:85b3fd62ea1a 79 This parameter can be a value of @ref ADC_ClockPrescaler */
NYX 0:85b3fd62ea1a 80 uint32_t Resolution; /*!< Configures the ADC resolution.
NYX 0:85b3fd62ea1a 81 This parameter can be a value of @ref ADC_Resolution */
NYX 0:85b3fd62ea1a 82 uint32_t DataAlign; /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)
NYX 0:85b3fd62ea1a 83 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).
NYX 0:85b3fd62ea1a 84 This parameter can be a value of @ref ADC_Data_align */
NYX 0:85b3fd62ea1a 85 uint32_t ScanConvMode; /*!< Configures the sequencer of regular and injected groups.
NYX 0:85b3fd62ea1a 86 This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.
NYX 0:85b3fd62ea1a 87 If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1).
NYX 0:85b3fd62ea1a 88 Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1).
NYX 0:85b3fd62ea1a 89 If enabled: Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank).
NYX 0:85b3fd62ea1a 90 Scan direction is upward: from rank1 to rank 'n'.
NYX 0:85b3fd62ea1a 91 This parameter can be set to ENABLE or DISABLE */
NYX 0:85b3fd62ea1a 92 uint32_t EOCSelection; /*!< Specifies what EOC (End Of Conversion) flag is used for conversion by polling and interruption: end of conversion of each rank or complete sequence.
NYX 0:85b3fd62ea1a 93 This parameter can be a value of @ref ADC_EOCSelection.
NYX 0:85b3fd62ea1a 94 Note: For injected group, end of conversion (flag&IT) is raised only at the end of the sequence.
NYX 0:85b3fd62ea1a 95 Therefore, if end of conversion is set to end of each conversion, injected group should not be used with interruption (HAL_ADCEx_InjectedStart_IT)
NYX 0:85b3fd62ea1a 96 or polling (HAL_ADCEx_InjectedStart and HAL_ADCEx_InjectedPollForConversion). By the way, polling is still possible since driver will use an estimated timing for end of injected conversion.
NYX 0:85b3fd62ea1a 97 Note: If overrun feature is intended to be used, use ADC in mode 'interruption' (function HAL_ADC_Start_IT() ) with parameter EOCSelection set to end of each conversion or in mode 'transfer by DMA' (function HAL_ADC_Start_DMA()).
NYX 0:85b3fd62ea1a 98 If overrun feature is intended to be bypassed, use ADC in mode 'polling' or 'interruption' with parameter EOCSelection must be set to end of sequence */
NYX 0:85b3fd62ea1a 99 uint32_t ContinuousConvMode; /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,
NYX 0:85b3fd62ea1a 100 after the selected trigger occurred (software start or external trigger).
NYX 0:85b3fd62ea1a 101 This parameter can be set to ENABLE or DISABLE. */
NYX 0:85b3fd62ea1a 102 uint32_t NbrOfConversion; /*!< Specifies the number of ranks that will be converted within the regular group sequencer.
NYX 0:85b3fd62ea1a 103 To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.
NYX 0:85b3fd62ea1a 104 This parameter must be a number between Min_Data = 1 and Max_Data = 16. */
NYX 0:85b3fd62ea1a 105 uint32_t DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
NYX 0:85b3fd62ea1a 106 Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.
NYX 0:85b3fd62ea1a 107 Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.
NYX 0:85b3fd62ea1a 108 This parameter can be set to ENABLE or DISABLE. */
NYX 0:85b3fd62ea1a 109 uint32_t NbrOfDiscConversion; /*!< Specifies the number of discontinuous conversions in which the main sequence of regular group (parameter NbrOfConversion) will be subdivided.
NYX 0:85b3fd62ea1a 110 If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded.
NYX 0:85b3fd62ea1a 111 This parameter must be a number between Min_Data = 1 and Max_Data = 8. */
NYX 0:85b3fd62ea1a 112 uint32_t ExternalTrigConv; /*!< Selects the external event used to trigger the conversion start of regular group.
NYX 0:85b3fd62ea1a 113 If set to ADC_SOFTWARE_START, external triggers are disabled.
NYX 0:85b3fd62ea1a 114 If set to external trigger source, triggering is on event rising edge by default.
NYX 0:85b3fd62ea1a 115 This parameter can be a value of @ref ADC_External_trigger_Source_Regular */
NYX 0:85b3fd62ea1a 116 uint32_t ExternalTrigConvEdge; /*!< Selects the external trigger edge of regular group.
NYX 0:85b3fd62ea1a 117 If trigger is set to ADC_SOFTWARE_START, this parameter is discarded.
NYX 0:85b3fd62ea1a 118 This parameter can be a value of @ref ADC_External_trigger_edge_Regular */
NYX 0:85b3fd62ea1a 119 uint32_t DMAContinuousRequests; /*!< Specifies whether the DMA requests are performed in one shot mode (DMA transfer stop when number of conversions is reached)
NYX 0:85b3fd62ea1a 120 or in Continuous mode (DMA transfer unlimited, whatever number of conversions).
NYX 0:85b3fd62ea1a 121 Note: In continuous mode, DMA must be configured in circular mode. Otherwise an overrun will be triggered when DMA buffer maximum pointer is reached.
NYX 0:85b3fd62ea1a 122 Note: This parameter must be modified when no conversion is on going on both regular and injected groups (ADC disabled, or ADC enabled without continuous mode or external trigger that could launch a conversion).
NYX 0:85b3fd62ea1a 123 This parameter can be set to ENABLE or DISABLE. */
NYX 0:85b3fd62ea1a 124 }ADC_InitTypeDef;
NYX 0:85b3fd62ea1a 125
NYX 0:85b3fd62ea1a 126
NYX 0:85b3fd62ea1a 127
NYX 0:85b3fd62ea1a 128 /**
NYX 0:85b3fd62ea1a 129 * @brief Structure definition of ADC channel for regular group
NYX 0:85b3fd62ea1a 130 * @note The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.
NYX 0:85b3fd62ea1a 131 * ADC can be either disabled or enabled without conversion on going on regular group.
NYX 0:85b3fd62ea1a 132 */
NYX 0:85b3fd62ea1a 133 typedef struct
NYX 0:85b3fd62ea1a 134 {
NYX 0:85b3fd62ea1a 135 uint32_t Channel; /*!< Specifies the channel to configure into ADC regular group.
NYX 0:85b3fd62ea1a 136 This parameter can be a value of @ref ADC_channels */
NYX 0:85b3fd62ea1a 137 uint32_t Rank; /*!< Specifies the rank in the regular group sequencer.
NYX 0:85b3fd62ea1a 138 This parameter must be a number between Min_Data = 1 and Max_Data = 16 */
NYX 0:85b3fd62ea1a 139 uint32_t SamplingTime; /*!< Sampling time value to be set for the selected channel.
NYX 0:85b3fd62ea1a 140 Unit: ADC clock cycles
NYX 0:85b3fd62ea1a 141 Conversion time is the addition of sampling time and processing time (12 ADC clock cycles at ADC resolution 12 bits, 11 cycles at 10 bits, 9 cycles at 8 bits, 7 cycles at 6 bits).
NYX 0:85b3fd62ea1a 142 This parameter can be a value of @ref ADC_sampling_times
NYX 0:85b3fd62ea1a 143 Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.
NYX 0:85b3fd62ea1a 144 If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.
NYX 0:85b3fd62ea1a 145 Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor),
NYX 0:85b3fd62ea1a 146 sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)
NYX 0:85b3fd62ea1a 147 Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 4us min). */
NYX 0:85b3fd62ea1a 148 uint32_t Offset; /*!< Reserved for future use, can be set to 0 */
NYX 0:85b3fd62ea1a 149 }ADC_ChannelConfTypeDef;
NYX 0:85b3fd62ea1a 150
NYX 0:85b3fd62ea1a 151 /**
NYX 0:85b3fd62ea1a 152 * @brief ADC Configuration multi-mode structure definition
NYX 0:85b3fd62ea1a 153 */
NYX 0:85b3fd62ea1a 154 typedef struct
NYX 0:85b3fd62ea1a 155 {
NYX 0:85b3fd62ea1a 156 uint32_t WatchdogMode; /*!< Configures the ADC analog watchdog mode.
NYX 0:85b3fd62ea1a 157 This parameter can be a value of @ref ADC_analog_watchdog_selection */
NYX 0:85b3fd62ea1a 158 uint32_t HighThreshold; /*!< Configures the ADC analog watchdog High threshold value.
NYX 0:85b3fd62ea1a 159 This parameter must be a 12-bit value. */
NYX 0:85b3fd62ea1a 160 uint32_t LowThreshold; /*!< Configures the ADC analog watchdog High threshold value.
NYX 0:85b3fd62ea1a 161 This parameter must be a 12-bit value. */
NYX 0:85b3fd62ea1a 162 uint32_t Channel; /*!< Configures ADC channel for the analog watchdog.
NYX 0:85b3fd62ea1a 163 This parameter has an effect only if watchdog mode is configured on single channel
NYX 0:85b3fd62ea1a 164 This parameter can be a value of @ref ADC_channels */
NYX 0:85b3fd62ea1a 165 uint32_t ITMode; /*!< Specifies whether the analog watchdog is configured
NYX 0:85b3fd62ea1a 166 is interrupt mode or in polling mode.
NYX 0:85b3fd62ea1a 167 This parameter can be set to ENABLE or DISABLE */
NYX 0:85b3fd62ea1a 168 uint32_t WatchdogNumber; /*!< Reserved for future use, can be set to 0 */
NYX 0:85b3fd62ea1a 169 }ADC_AnalogWDGConfTypeDef;
NYX 0:85b3fd62ea1a 170
NYX 0:85b3fd62ea1a 171 /**
NYX 0:85b3fd62ea1a 172 * @brief HAL ADC state machine: ADC states definition (bitfields)
NYX 0:85b3fd62ea1a 173 */
NYX 0:85b3fd62ea1a 174 /* States of ADC global scope */
NYX 0:85b3fd62ea1a 175 #define HAL_ADC_STATE_RESET 0x00000000U /*!< ADC not yet initialized or disabled */
NYX 0:85b3fd62ea1a 176 #define HAL_ADC_STATE_READY 0x00000001U /*!< ADC peripheral ready for use */
NYX 0:85b3fd62ea1a 177 #define HAL_ADC_STATE_BUSY_INTERNAL 0x00000002U /*!< ADC is busy to internal process (initialization, calibration) */
NYX 0:85b3fd62ea1a 178 #define HAL_ADC_STATE_TIMEOUT 0x00000004U /*!< TimeOut occurrence */
NYX 0:85b3fd62ea1a 179
NYX 0:85b3fd62ea1a 180 /* States of ADC errors */
NYX 0:85b3fd62ea1a 181 #define HAL_ADC_STATE_ERROR_INTERNAL 0x00000010U /*!< Internal error occurrence */
NYX 0:85b3fd62ea1a 182 #define HAL_ADC_STATE_ERROR_CONFIG 0x00000020U /*!< Configuration error occurrence */
NYX 0:85b3fd62ea1a 183 #define HAL_ADC_STATE_ERROR_DMA 0x00000040U /*!< DMA error occurrence */
NYX 0:85b3fd62ea1a 184
NYX 0:85b3fd62ea1a 185 /* States of ADC group regular */
NYX 0:85b3fd62ea1a 186 #define HAL_ADC_STATE_REG_BUSY 0x00000100U /*!< A conversion on group regular is ongoing or can occur (either by continuous mode,
NYX 0:85b3fd62ea1a 187 external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */
NYX 0:85b3fd62ea1a 188 #define HAL_ADC_STATE_REG_EOC 0x00000200U /*!< Conversion data available on group regular */
NYX 0:85b3fd62ea1a 189 #define HAL_ADC_STATE_REG_OVR 0x00000400U /*!< Overrun occurrence */
NYX 0:85b3fd62ea1a 190
NYX 0:85b3fd62ea1a 191 /* States of ADC group injected */
NYX 0:85b3fd62ea1a 192 #define HAL_ADC_STATE_INJ_BUSY 0x00001000U /*!< A conversion on group injected is ongoing or can occur (either by auto-injection mode,
NYX 0:85b3fd62ea1a 193 external trigger, low power auto power-on (if feature available), multimode ADC master control (if feature available)) */
NYX 0:85b3fd62ea1a 194 #define HAL_ADC_STATE_INJ_EOC 0x00002000U /*!< Conversion data available on group injected */
NYX 0:85b3fd62ea1a 195
NYX 0:85b3fd62ea1a 196 /* States of ADC analog watchdogs */
NYX 0:85b3fd62ea1a 197 #define HAL_ADC_STATE_AWD1 0x00010000U /*!< Out-of-window occurrence of analog watchdog 1 */
NYX 0:85b3fd62ea1a 198 #define HAL_ADC_STATE_AWD2 0x00020000U /*!< Not available on STM32F4 device: Out-of-window occurrence of analog watchdog 2 */
NYX 0:85b3fd62ea1a 199 #define HAL_ADC_STATE_AWD3 0x00040000U /*!< Not available on STM32F4 device: Out-of-window occurrence of analog watchdog 3 */
NYX 0:85b3fd62ea1a 200
NYX 0:85b3fd62ea1a 201 /* States of ADC multi-mode */
NYX 0:85b3fd62ea1a 202 #define HAL_ADC_STATE_MULTIMODE_SLAVE 0x00100000U /*!< Not available on STM32F4 device: ADC in multimode slave state, controlled by another ADC master ( */
NYX 0:85b3fd62ea1a 203
NYX 0:85b3fd62ea1a 204
NYX 0:85b3fd62ea1a 205 /**
NYX 0:85b3fd62ea1a 206 * @brief ADC handle Structure definition
NYX 0:85b3fd62ea1a 207 */
NYX 0:85b3fd62ea1a 208 typedef struct
NYX 0:85b3fd62ea1a 209 {
NYX 0:85b3fd62ea1a 210 ADC_TypeDef *Instance; /*!< Register base address */
NYX 0:85b3fd62ea1a 211
NYX 0:85b3fd62ea1a 212 ADC_InitTypeDef Init; /*!< ADC required parameters */
NYX 0:85b3fd62ea1a 213
NYX 0:85b3fd62ea1a 214 __IO uint32_t NbrOfCurrentConversionRank; /*!< ADC number of current conversion rank */
NYX 0:85b3fd62ea1a 215
NYX 0:85b3fd62ea1a 216 DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */
NYX 0:85b3fd62ea1a 217
NYX 0:85b3fd62ea1a 218 HAL_LockTypeDef Lock; /*!< ADC locking object */
NYX 0:85b3fd62ea1a 219
NYX 0:85b3fd62ea1a 220 __IO uint32_t State; /*!< ADC communication state */
NYX 0:85b3fd62ea1a 221
NYX 0:85b3fd62ea1a 222 __IO uint32_t ErrorCode; /*!< ADC Error code */
NYX 0:85b3fd62ea1a 223 }ADC_HandleTypeDef;
NYX 0:85b3fd62ea1a 224 /**
NYX 0:85b3fd62ea1a 225 * @}
NYX 0:85b3fd62ea1a 226 */
NYX 0:85b3fd62ea1a 227
NYX 0:85b3fd62ea1a 228 /* Exported constants --------------------------------------------------------*/
NYX 0:85b3fd62ea1a 229 /** @defgroup ADC_Exported_Constants ADC Exported Constants
NYX 0:85b3fd62ea1a 230 * @{
NYX 0:85b3fd62ea1a 231 */
NYX 0:85b3fd62ea1a 232
NYX 0:85b3fd62ea1a 233 /** @defgroup ADC_Error_Code ADC Error Code
NYX 0:85b3fd62ea1a 234 * @{
NYX 0:85b3fd62ea1a 235 */
NYX 0:85b3fd62ea1a 236 #define HAL_ADC_ERROR_NONE 0x00U /*!< No error */
NYX 0:85b3fd62ea1a 237 #define HAL_ADC_ERROR_INTERNAL 0x01U /*!< ADC IP internal error: if problem of clocking,
NYX 0:85b3fd62ea1a 238 enable/disable, erroneous state */
NYX 0:85b3fd62ea1a 239 #define HAL_ADC_ERROR_OVR 0x02U /*!< Overrun error */
NYX 0:85b3fd62ea1a 240 #define HAL_ADC_ERROR_DMA 0x04U /*!< DMA transfer error */
NYX 0:85b3fd62ea1a 241 /**
NYX 0:85b3fd62ea1a 242 * @}
NYX 0:85b3fd62ea1a 243 */
NYX 0:85b3fd62ea1a 244
NYX 0:85b3fd62ea1a 245
NYX 0:85b3fd62ea1a 246 /** @defgroup ADC_ClockPrescaler ADC Clock Prescaler
NYX 0:85b3fd62ea1a 247 * @{
NYX 0:85b3fd62ea1a 248 */
NYX 0:85b3fd62ea1a 249 #define ADC_CLOCK_SYNC_PCLK_DIV2 0x00000000U
NYX 0:85b3fd62ea1a 250 #define ADC_CLOCK_SYNC_PCLK_DIV4 ((uint32_t)ADC_CCR_ADCPRE_0)
NYX 0:85b3fd62ea1a 251 #define ADC_CLOCK_SYNC_PCLK_DIV6 ((uint32_t)ADC_CCR_ADCPRE_1)
NYX 0:85b3fd62ea1a 252 #define ADC_CLOCK_SYNC_PCLK_DIV8 ((uint32_t)ADC_CCR_ADCPRE)
NYX 0:85b3fd62ea1a 253 /**
NYX 0:85b3fd62ea1a 254 * @}
NYX 0:85b3fd62ea1a 255 */
NYX 0:85b3fd62ea1a 256
NYX 0:85b3fd62ea1a 257 /** @defgroup ADC_delay_between_2_sampling_phases ADC Delay Between 2 Sampling Phases
NYX 0:85b3fd62ea1a 258 * @{
NYX 0:85b3fd62ea1a 259 */
NYX 0:85b3fd62ea1a 260 #define ADC_TWOSAMPLINGDELAY_5CYCLES 0x00000000U
NYX 0:85b3fd62ea1a 261 #define ADC_TWOSAMPLINGDELAY_6CYCLES ((uint32_t)ADC_CCR_DELAY_0)
NYX 0:85b3fd62ea1a 262 #define ADC_TWOSAMPLINGDELAY_7CYCLES ((uint32_t)ADC_CCR_DELAY_1)
NYX 0:85b3fd62ea1a 263 #define ADC_TWOSAMPLINGDELAY_8CYCLES ((uint32_t)(ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 264 #define ADC_TWOSAMPLINGDELAY_9CYCLES ((uint32_t)ADC_CCR_DELAY_2)
NYX 0:85b3fd62ea1a 265 #define ADC_TWOSAMPLINGDELAY_10CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 266 #define ADC_TWOSAMPLINGDELAY_11CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1))
NYX 0:85b3fd62ea1a 267 #define ADC_TWOSAMPLINGDELAY_12CYCLES ((uint32_t)(ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 268 #define ADC_TWOSAMPLINGDELAY_13CYCLES ((uint32_t)ADC_CCR_DELAY_3)
NYX 0:85b3fd62ea1a 269 #define ADC_TWOSAMPLINGDELAY_14CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 270 #define ADC_TWOSAMPLINGDELAY_15CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1))
NYX 0:85b3fd62ea1a 271 #define ADC_TWOSAMPLINGDELAY_16CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_1 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 272 #define ADC_TWOSAMPLINGDELAY_17CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2))
NYX 0:85b3fd62ea1a 273 #define ADC_TWOSAMPLINGDELAY_18CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2 | ADC_CCR_DELAY_0))
NYX 0:85b3fd62ea1a 274 #define ADC_TWOSAMPLINGDELAY_19CYCLES ((uint32_t)(ADC_CCR_DELAY_3 | ADC_CCR_DELAY_2 | ADC_CCR_DELAY_1))
NYX 0:85b3fd62ea1a 275 #define ADC_TWOSAMPLINGDELAY_20CYCLES ((uint32_t)ADC_CCR_DELAY)
NYX 0:85b3fd62ea1a 276 /**
NYX 0:85b3fd62ea1a 277 * @}
NYX 0:85b3fd62ea1a 278 */
NYX 0:85b3fd62ea1a 279
NYX 0:85b3fd62ea1a 280 /** @defgroup ADC_Resolution ADC Resolution
NYX 0:85b3fd62ea1a 281 * @{
NYX 0:85b3fd62ea1a 282 */
NYX 0:85b3fd62ea1a 283 #define ADC_RESOLUTION_12B 0x00000000U
NYX 0:85b3fd62ea1a 284 #define ADC_RESOLUTION_10B ((uint32_t)ADC_CR1_RES_0)
NYX 0:85b3fd62ea1a 285 #define ADC_RESOLUTION_8B ((uint32_t)ADC_CR1_RES_1)
NYX 0:85b3fd62ea1a 286 #define ADC_RESOLUTION_6B ((uint32_t)ADC_CR1_RES)
NYX 0:85b3fd62ea1a 287 /**
NYX 0:85b3fd62ea1a 288 * @}
NYX 0:85b3fd62ea1a 289 */
NYX 0:85b3fd62ea1a 290
NYX 0:85b3fd62ea1a 291 /** @defgroup ADC_External_trigger_edge_Regular ADC External Trigger Edge Regular
NYX 0:85b3fd62ea1a 292 * @{
NYX 0:85b3fd62ea1a 293 */
NYX 0:85b3fd62ea1a 294 #define ADC_EXTERNALTRIGCONVEDGE_NONE 0x00000000U
NYX 0:85b3fd62ea1a 295 #define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CR2_EXTEN_0)
NYX 0:85b3fd62ea1a 296 #define ADC_EXTERNALTRIGCONVEDGE_FALLING ((uint32_t)ADC_CR2_EXTEN_1)
NYX 0:85b3fd62ea1a 297 #define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING ((uint32_t)ADC_CR2_EXTEN)
NYX 0:85b3fd62ea1a 298 /**
NYX 0:85b3fd62ea1a 299 * @}
NYX 0:85b3fd62ea1a 300 */
NYX 0:85b3fd62ea1a 301
NYX 0:85b3fd62ea1a 302 /** @defgroup ADC_External_trigger_Source_Regular ADC External Trigger Source Regular
NYX 0:85b3fd62ea1a 303 * @{
NYX 0:85b3fd62ea1a 304 */
NYX 0:85b3fd62ea1a 305 /* Note: Parameter ADC_SOFTWARE_START is a software parameter used for */
NYX 0:85b3fd62ea1a 306 /* compatibility with other STM32 devices. */
NYX 0:85b3fd62ea1a 307 #define ADC_EXTERNALTRIGCONV_T1_CC1 0x00000000U
NYX 0:85b3fd62ea1a 308 #define ADC_EXTERNALTRIGCONV_T1_CC2 ((uint32_t)ADC_CR2_EXTSEL_0)
NYX 0:85b3fd62ea1a 309 #define ADC_EXTERNALTRIGCONV_T1_CC3 ((uint32_t)ADC_CR2_EXTSEL_1)
NYX 0:85b3fd62ea1a 310 #define ADC_EXTERNALTRIGCONV_T2_CC2 ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 311 #define ADC_EXTERNALTRIGCONV_T2_CC3 ((uint32_t)ADC_CR2_EXTSEL_2)
NYX 0:85b3fd62ea1a 312 #define ADC_EXTERNALTRIGCONV_T2_CC4 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 313 #define ADC_EXTERNALTRIGCONV_T2_TRGO ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
NYX 0:85b3fd62ea1a 314 #define ADC_EXTERNALTRIGCONV_T3_CC1 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 315 #define ADC_EXTERNALTRIGCONV_T3_TRGO ((uint32_t)ADC_CR2_EXTSEL_3)
NYX 0:85b3fd62ea1a 316 #define ADC_EXTERNALTRIGCONV_T4_CC4 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 317 #define ADC_EXTERNALTRIGCONV_T5_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1))
NYX 0:85b3fd62ea1a 318 #define ADC_EXTERNALTRIGCONV_T5_CC2 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 319 #define ADC_EXTERNALTRIGCONV_T5_CC3 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2))
NYX 0:85b3fd62ea1a 320 #define ADC_EXTERNALTRIGCONV_T8_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
NYX 0:85b3fd62ea1a 321 #define ADC_EXTERNALTRIGCONV_T8_TRGO ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
NYX 0:85b3fd62ea1a 322 #define ADC_EXTERNALTRIGCONV_Ext_IT11 ((uint32_t)ADC_CR2_EXTSEL)
NYX 0:85b3fd62ea1a 323 #define ADC_SOFTWARE_START ((uint32_t)ADC_CR2_EXTSEL + 1U)
NYX 0:85b3fd62ea1a 324 /**
NYX 0:85b3fd62ea1a 325 * @}
NYX 0:85b3fd62ea1a 326 */
NYX 0:85b3fd62ea1a 327
NYX 0:85b3fd62ea1a 328 /** @defgroup ADC_Data_align ADC Data Align
NYX 0:85b3fd62ea1a 329 * @{
NYX 0:85b3fd62ea1a 330 */
NYX 0:85b3fd62ea1a 331 #define ADC_DATAALIGN_RIGHT 0x00000000U
NYX 0:85b3fd62ea1a 332 #define ADC_DATAALIGN_LEFT ((uint32_t)ADC_CR2_ALIGN)
NYX 0:85b3fd62ea1a 333 /**
NYX 0:85b3fd62ea1a 334 * @}
NYX 0:85b3fd62ea1a 335 */
NYX 0:85b3fd62ea1a 336
NYX 0:85b3fd62ea1a 337 /** @defgroup ADC_channels ADC Common Channels
NYX 0:85b3fd62ea1a 338 * @{
NYX 0:85b3fd62ea1a 339 */
NYX 0:85b3fd62ea1a 340 #define ADC_CHANNEL_0 0x00000000U
NYX 0:85b3fd62ea1a 341 #define ADC_CHANNEL_1 ((uint32_t)ADC_CR1_AWDCH_0)
NYX 0:85b3fd62ea1a 342 #define ADC_CHANNEL_2 ((uint32_t)ADC_CR1_AWDCH_1)
NYX 0:85b3fd62ea1a 343 #define ADC_CHANNEL_3 ((uint32_t)(ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 344 #define ADC_CHANNEL_4 ((uint32_t)ADC_CR1_AWDCH_2)
NYX 0:85b3fd62ea1a 345 #define ADC_CHANNEL_5 ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 346 #define ADC_CHANNEL_6 ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1))
NYX 0:85b3fd62ea1a 347 #define ADC_CHANNEL_7 ((uint32_t)(ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 348 #define ADC_CHANNEL_8 ((uint32_t)ADC_CR1_AWDCH_3)
NYX 0:85b3fd62ea1a 349 #define ADC_CHANNEL_9 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 350 #define ADC_CHANNEL_10 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1))
NYX 0:85b3fd62ea1a 351 #define ADC_CHANNEL_11 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 352 #define ADC_CHANNEL_12 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2))
NYX 0:85b3fd62ea1a 353 #define ADC_CHANNEL_13 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 354 #define ADC_CHANNEL_14 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1))
NYX 0:85b3fd62ea1a 355 #define ADC_CHANNEL_15 ((uint32_t)(ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 356 #define ADC_CHANNEL_16 ((uint32_t)ADC_CR1_AWDCH_4)
NYX 0:85b3fd62ea1a 357 #define ADC_CHANNEL_17 ((uint32_t)(ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_0))
NYX 0:85b3fd62ea1a 358 #define ADC_CHANNEL_18 ((uint32_t)(ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_1))
NYX 0:85b3fd62ea1a 359
NYX 0:85b3fd62ea1a 360 #define ADC_CHANNEL_VREFINT ((uint32_t)ADC_CHANNEL_17)
NYX 0:85b3fd62ea1a 361 #define ADC_CHANNEL_VBAT ((uint32_t)ADC_CHANNEL_18)
NYX 0:85b3fd62ea1a 362 /**
NYX 0:85b3fd62ea1a 363 * @}
NYX 0:85b3fd62ea1a 364 */
NYX 0:85b3fd62ea1a 365
NYX 0:85b3fd62ea1a 366 /** @defgroup ADC_sampling_times ADC Sampling Times
NYX 0:85b3fd62ea1a 367 * @{
NYX 0:85b3fd62ea1a 368 */
NYX 0:85b3fd62ea1a 369 #define ADC_SAMPLETIME_3CYCLES 0x00000000U
NYX 0:85b3fd62ea1a 370 #define ADC_SAMPLETIME_15CYCLES ((uint32_t)ADC_SMPR1_SMP10_0)
NYX 0:85b3fd62ea1a 371 #define ADC_SAMPLETIME_28CYCLES ((uint32_t)ADC_SMPR1_SMP10_1)
NYX 0:85b3fd62ea1a 372 #define ADC_SAMPLETIME_56CYCLES ((uint32_t)(ADC_SMPR1_SMP10_1 | ADC_SMPR1_SMP10_0))
NYX 0:85b3fd62ea1a 373 #define ADC_SAMPLETIME_84CYCLES ((uint32_t)ADC_SMPR1_SMP10_2)
NYX 0:85b3fd62ea1a 374 #define ADC_SAMPLETIME_112CYCLES ((uint32_t)(ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_0))
NYX 0:85b3fd62ea1a 375 #define ADC_SAMPLETIME_144CYCLES ((uint32_t)(ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_1))
NYX 0:85b3fd62ea1a 376 #define ADC_SAMPLETIME_480CYCLES ((uint32_t)ADC_SMPR1_SMP10)
NYX 0:85b3fd62ea1a 377 /**
NYX 0:85b3fd62ea1a 378 * @}
NYX 0:85b3fd62ea1a 379 */
NYX 0:85b3fd62ea1a 380
NYX 0:85b3fd62ea1a 381 /** @defgroup ADC_EOCSelection ADC EOC Selection
NYX 0:85b3fd62ea1a 382 * @{
NYX 0:85b3fd62ea1a 383 */
NYX 0:85b3fd62ea1a 384 #define ADC_EOC_SEQ_CONV 0x00000000U
NYX 0:85b3fd62ea1a 385 #define ADC_EOC_SINGLE_CONV 0x00000001U
NYX 0:85b3fd62ea1a 386 #define ADC_EOC_SINGLE_SEQ_CONV 0x00000002U /*!< reserved for future use */
NYX 0:85b3fd62ea1a 387 /**
NYX 0:85b3fd62ea1a 388 * @}
NYX 0:85b3fd62ea1a 389 */
NYX 0:85b3fd62ea1a 390
NYX 0:85b3fd62ea1a 391 /** @defgroup ADC_Event_type ADC Event Type
NYX 0:85b3fd62ea1a 392 * @{
NYX 0:85b3fd62ea1a 393 */
NYX 0:85b3fd62ea1a 394 #define ADC_AWD_EVENT ((uint32_t)ADC_FLAG_AWD)
NYX 0:85b3fd62ea1a 395 #define ADC_OVR_EVENT ((uint32_t)ADC_FLAG_OVR)
NYX 0:85b3fd62ea1a 396 /**
NYX 0:85b3fd62ea1a 397 * @}
NYX 0:85b3fd62ea1a 398 */
NYX 0:85b3fd62ea1a 399
NYX 0:85b3fd62ea1a 400 /** @defgroup ADC_analog_watchdog_selection ADC Analog Watchdog Selection
NYX 0:85b3fd62ea1a 401 * @{
NYX 0:85b3fd62ea1a 402 */
NYX 0:85b3fd62ea1a 403 #define ADC_ANALOGWATCHDOG_SINGLE_REG ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN))
NYX 0:85b3fd62ea1a 404 #define ADC_ANALOGWATCHDOG_SINGLE_INJEC ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN))
NYX 0:85b3fd62ea1a 405 #define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN))
NYX 0:85b3fd62ea1a 406 #define ADC_ANALOGWATCHDOG_ALL_REG ((uint32_t)ADC_CR1_AWDEN)
NYX 0:85b3fd62ea1a 407 #define ADC_ANALOGWATCHDOG_ALL_INJEC ((uint32_t)ADC_CR1_JAWDEN)
NYX 0:85b3fd62ea1a 408 #define ADC_ANALOGWATCHDOG_ALL_REGINJEC ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN))
NYX 0:85b3fd62ea1a 409 #define ADC_ANALOGWATCHDOG_NONE 0x00000000U
NYX 0:85b3fd62ea1a 410 /**
NYX 0:85b3fd62ea1a 411 * @}
NYX 0:85b3fd62ea1a 412 */
NYX 0:85b3fd62ea1a 413
NYX 0:85b3fd62ea1a 414 /** @defgroup ADC_interrupts_definition ADC Interrupts Definition
NYX 0:85b3fd62ea1a 415 * @{
NYX 0:85b3fd62ea1a 416 */
NYX 0:85b3fd62ea1a 417 #define ADC_IT_EOC ((uint32_t)ADC_CR1_EOCIE)
NYX 0:85b3fd62ea1a 418 #define ADC_IT_AWD ((uint32_t)ADC_CR1_AWDIE)
NYX 0:85b3fd62ea1a 419 #define ADC_IT_JEOC ((uint32_t)ADC_CR1_JEOCIE)
NYX 0:85b3fd62ea1a 420 #define ADC_IT_OVR ((uint32_t)ADC_CR1_OVRIE)
NYX 0:85b3fd62ea1a 421 /**
NYX 0:85b3fd62ea1a 422 * @}
NYX 0:85b3fd62ea1a 423 */
NYX 0:85b3fd62ea1a 424
NYX 0:85b3fd62ea1a 425 /** @defgroup ADC_flags_definition ADC Flags Definition
NYX 0:85b3fd62ea1a 426 * @{
NYX 0:85b3fd62ea1a 427 */
NYX 0:85b3fd62ea1a 428 #define ADC_FLAG_AWD ((uint32_t)ADC_SR_AWD)
NYX 0:85b3fd62ea1a 429 #define ADC_FLAG_EOC ((uint32_t)ADC_SR_EOC)
NYX 0:85b3fd62ea1a 430 #define ADC_FLAG_JEOC ((uint32_t)ADC_SR_JEOC)
NYX 0:85b3fd62ea1a 431 #define ADC_FLAG_JSTRT ((uint32_t)ADC_SR_JSTRT)
NYX 0:85b3fd62ea1a 432 #define ADC_FLAG_STRT ((uint32_t)ADC_SR_STRT)
NYX 0:85b3fd62ea1a 433 #define ADC_FLAG_OVR ((uint32_t)ADC_SR_OVR)
NYX 0:85b3fd62ea1a 434 /**
NYX 0:85b3fd62ea1a 435 * @}
NYX 0:85b3fd62ea1a 436 */
NYX 0:85b3fd62ea1a 437
NYX 0:85b3fd62ea1a 438 /** @defgroup ADC_channels_type ADC Channels Type
NYX 0:85b3fd62ea1a 439 * @{
NYX 0:85b3fd62ea1a 440 */
NYX 0:85b3fd62ea1a 441 #define ADC_ALL_CHANNELS 0x00000001U
NYX 0:85b3fd62ea1a 442 #define ADC_REGULAR_CHANNELS 0x00000002U /*!< reserved for future use */
NYX 0:85b3fd62ea1a 443 #define ADC_INJECTED_CHANNELS 0x00000003U /*!< reserved for future use */
NYX 0:85b3fd62ea1a 444 /**
NYX 0:85b3fd62ea1a 445 * @}
NYX 0:85b3fd62ea1a 446 */
NYX 0:85b3fd62ea1a 447
NYX 0:85b3fd62ea1a 448 /**
NYX 0:85b3fd62ea1a 449 * @}
NYX 0:85b3fd62ea1a 450 */
NYX 0:85b3fd62ea1a 451
NYX 0:85b3fd62ea1a 452 /* Exported macro ------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 453 /** @defgroup ADC_Exported_Macros ADC Exported Macros
NYX 0:85b3fd62ea1a 454 * @{
NYX 0:85b3fd62ea1a 455 */
NYX 0:85b3fd62ea1a 456
NYX 0:85b3fd62ea1a 457 /** @brief Reset ADC handle state
NYX 0:85b3fd62ea1a 458 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 459 * @retval None
NYX 0:85b3fd62ea1a 460 */
NYX 0:85b3fd62ea1a 461 #define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET)
NYX 0:85b3fd62ea1a 462
NYX 0:85b3fd62ea1a 463 /**
NYX 0:85b3fd62ea1a 464 * @brief Enable the ADC peripheral.
NYX 0:85b3fd62ea1a 465 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 466 * @retval None
NYX 0:85b3fd62ea1a 467 */
NYX 0:85b3fd62ea1a 468 #define __HAL_ADC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR2 |= ADC_CR2_ADON)
NYX 0:85b3fd62ea1a 469
NYX 0:85b3fd62ea1a 470 /**
NYX 0:85b3fd62ea1a 471 * @brief Disable the ADC peripheral.
NYX 0:85b3fd62ea1a 472 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 473 * @retval None
NYX 0:85b3fd62ea1a 474 */
NYX 0:85b3fd62ea1a 475 #define __HAL_ADC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR2 &= ~ADC_CR2_ADON)
NYX 0:85b3fd62ea1a 476
NYX 0:85b3fd62ea1a 477 /**
NYX 0:85b3fd62ea1a 478 * @brief Enable the ADC end of conversion interrupt.
NYX 0:85b3fd62ea1a 479 * @param __HANDLE__: specifies the ADC Handle.
NYX 0:85b3fd62ea1a 480 * @param __INTERRUPT__: ADC Interrupt.
NYX 0:85b3fd62ea1a 481 * @retval None
NYX 0:85b3fd62ea1a 482 */
NYX 0:85b3fd62ea1a 483 #define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1) |= (__INTERRUPT__))
NYX 0:85b3fd62ea1a 484
NYX 0:85b3fd62ea1a 485 /**
NYX 0:85b3fd62ea1a 486 * @brief Disable the ADC end of conversion interrupt.
NYX 0:85b3fd62ea1a 487 * @param __HANDLE__: specifies the ADC Handle.
NYX 0:85b3fd62ea1a 488 * @param __INTERRUPT__: ADC interrupt.
NYX 0:85b3fd62ea1a 489 * @retval None
NYX 0:85b3fd62ea1a 490 */
NYX 0:85b3fd62ea1a 491 #define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1) &= ~(__INTERRUPT__))
NYX 0:85b3fd62ea1a 492
NYX 0:85b3fd62ea1a 493 /** @brief Check if the specified ADC interrupt source is enabled or disabled.
NYX 0:85b3fd62ea1a 494 * @param __HANDLE__: specifies the ADC Handle.
NYX 0:85b3fd62ea1a 495 * @param __INTERRUPT__: specifies the ADC interrupt source to check.
NYX 0:85b3fd62ea1a 496 * @retval The new state of __IT__ (TRUE or FALSE).
NYX 0:85b3fd62ea1a 497 */
NYX 0:85b3fd62ea1a 498 #define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__))
NYX 0:85b3fd62ea1a 499
NYX 0:85b3fd62ea1a 500 /**
NYX 0:85b3fd62ea1a 501 * @brief Clear the ADC's pending flags.
NYX 0:85b3fd62ea1a 502 * @param __HANDLE__: specifies the ADC Handle.
NYX 0:85b3fd62ea1a 503 * @param __FLAG__: ADC flag.
NYX 0:85b3fd62ea1a 504 * @retval None
NYX 0:85b3fd62ea1a 505 */
NYX 0:85b3fd62ea1a 506 #define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = ~(__FLAG__))
NYX 0:85b3fd62ea1a 507
NYX 0:85b3fd62ea1a 508 /**
NYX 0:85b3fd62ea1a 509 * @brief Get the selected ADC's flag status.
NYX 0:85b3fd62ea1a 510 * @param __HANDLE__: specifies the ADC Handle.
NYX 0:85b3fd62ea1a 511 * @param __FLAG__: ADC flag.
NYX 0:85b3fd62ea1a 512 * @retval None
NYX 0:85b3fd62ea1a 513 */
NYX 0:85b3fd62ea1a 514 #define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
NYX 0:85b3fd62ea1a 515
NYX 0:85b3fd62ea1a 516 /**
NYX 0:85b3fd62ea1a 517 * @}
NYX 0:85b3fd62ea1a 518 */
NYX 0:85b3fd62ea1a 519
NYX 0:85b3fd62ea1a 520 /* Include ADC HAL Extension module */
NYX 0:85b3fd62ea1a 521 #include "stm32f4xx_hal_adc_ex.h"
NYX 0:85b3fd62ea1a 522
NYX 0:85b3fd62ea1a 523 /* Exported functions --------------------------------------------------------*/
NYX 0:85b3fd62ea1a 524 /** @addtogroup ADC_Exported_Functions
NYX 0:85b3fd62ea1a 525 * @{
NYX 0:85b3fd62ea1a 526 */
NYX 0:85b3fd62ea1a 527
NYX 0:85b3fd62ea1a 528 /** @addtogroup ADC_Exported_Functions_Group1
NYX 0:85b3fd62ea1a 529 * @{
NYX 0:85b3fd62ea1a 530 */
NYX 0:85b3fd62ea1a 531 /* Initialization/de-initialization functions ***********************************/
NYX 0:85b3fd62ea1a 532 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 533 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);
NYX 0:85b3fd62ea1a 534 void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 535 void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 536 /**
NYX 0:85b3fd62ea1a 537 * @}
NYX 0:85b3fd62ea1a 538 */
NYX 0:85b3fd62ea1a 539
NYX 0:85b3fd62ea1a 540 /** @addtogroup ADC_Exported_Functions_Group2
NYX 0:85b3fd62ea1a 541 * @{
NYX 0:85b3fd62ea1a 542 */
NYX 0:85b3fd62ea1a 543 /* I/O operation functions ******************************************************/
NYX 0:85b3fd62ea1a 544 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 545 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 546 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
NYX 0:85b3fd62ea1a 547
NYX 0:85b3fd62ea1a 548 HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout);
NYX 0:85b3fd62ea1a 549
NYX 0:85b3fd62ea1a 550 HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 551 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 552
NYX 0:85b3fd62ea1a 553 void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 554
NYX 0:85b3fd62ea1a 555 HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
NYX 0:85b3fd62ea1a 556 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 557
NYX 0:85b3fd62ea1a 558 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 559
NYX 0:85b3fd62ea1a 560 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 561 void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 562 void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 563 void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);
NYX 0:85b3fd62ea1a 564 /**
NYX 0:85b3fd62ea1a 565 * @}
NYX 0:85b3fd62ea1a 566 */
NYX 0:85b3fd62ea1a 567
NYX 0:85b3fd62ea1a 568 /** @addtogroup ADC_Exported_Functions_Group3
NYX 0:85b3fd62ea1a 569 * @{
NYX 0:85b3fd62ea1a 570 */
NYX 0:85b3fd62ea1a 571 /* Peripheral Control functions *************************************************/
NYX 0:85b3fd62ea1a 572 HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig);
NYX 0:85b3fd62ea1a 573 HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig);
NYX 0:85b3fd62ea1a 574 /**
NYX 0:85b3fd62ea1a 575 * @}
NYX 0:85b3fd62ea1a 576 */
NYX 0:85b3fd62ea1a 577
NYX 0:85b3fd62ea1a 578 /** @addtogroup ADC_Exported_Functions_Group4
NYX 0:85b3fd62ea1a 579 * @{
NYX 0:85b3fd62ea1a 580 */
NYX 0:85b3fd62ea1a 581 /* Peripheral State functions ***************************************************/
NYX 0:85b3fd62ea1a 582 uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc);
NYX 0:85b3fd62ea1a 583 uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);
NYX 0:85b3fd62ea1a 584 /**
NYX 0:85b3fd62ea1a 585 * @}
NYX 0:85b3fd62ea1a 586 */
NYX 0:85b3fd62ea1a 587
NYX 0:85b3fd62ea1a 588 /**
NYX 0:85b3fd62ea1a 589 * @}
NYX 0:85b3fd62ea1a 590 */
NYX 0:85b3fd62ea1a 591 /* Private types -------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 592 /* Private variables ---------------------------------------------------------*/
NYX 0:85b3fd62ea1a 593 /* Private constants ---------------------------------------------------------*/
NYX 0:85b3fd62ea1a 594 /** @defgroup ADC_Private_Constants ADC Private Constants
NYX 0:85b3fd62ea1a 595 * @{
NYX 0:85b3fd62ea1a 596 */
NYX 0:85b3fd62ea1a 597 /* Delay for ADC stabilization time. */
NYX 0:85b3fd62ea1a 598 /* Maximum delay is 1us (refer to device datasheet, parameter tSTAB). */
NYX 0:85b3fd62ea1a 599 /* Unit: us */
NYX 0:85b3fd62ea1a 600 #define ADC_STAB_DELAY_US 3U
NYX 0:85b3fd62ea1a 601 /* Delay for temperature sensor stabilization time. */
NYX 0:85b3fd62ea1a 602 /* Maximum delay is 10us (refer to device datasheet, parameter tSTART). */
NYX 0:85b3fd62ea1a 603 /* Unit: us */
NYX 0:85b3fd62ea1a 604 #define ADC_TEMPSENSOR_DELAY_US 10U
NYX 0:85b3fd62ea1a 605 /**
NYX 0:85b3fd62ea1a 606 * @}
NYX 0:85b3fd62ea1a 607 */
NYX 0:85b3fd62ea1a 608
NYX 0:85b3fd62ea1a 609 /* Private macro ------------------------------------------------------------*/
NYX 0:85b3fd62ea1a 610
NYX 0:85b3fd62ea1a 611 /** @defgroup ADC_Private_Macros ADC Private Macros
NYX 0:85b3fd62ea1a 612 * @{
NYX 0:85b3fd62ea1a 613 */
NYX 0:85b3fd62ea1a 614 /* Macro reserved for internal HAL driver usage, not intended to be used in
NYX 0:85b3fd62ea1a 615 code of final user */
NYX 0:85b3fd62ea1a 616
NYX 0:85b3fd62ea1a 617 /**
NYX 0:85b3fd62ea1a 618 * @brief Verification of ADC state: enabled or disabled
NYX 0:85b3fd62ea1a 619 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 620 * @retval SET (ADC enabled) or RESET (ADC disabled)
NYX 0:85b3fd62ea1a 621 */
NYX 0:85b3fd62ea1a 622 #define ADC_IS_ENABLE(__HANDLE__) \
NYX 0:85b3fd62ea1a 623 ((( ((__HANDLE__)->Instance->SR & ADC_SR_ADONS) == ADC_SR_ADONS ) \
NYX 0:85b3fd62ea1a 624 ) ? SET : RESET)
NYX 0:85b3fd62ea1a 625
NYX 0:85b3fd62ea1a 626 /**
NYX 0:85b3fd62ea1a 627 * @brief Test if conversion trigger of regular group is software start
NYX 0:85b3fd62ea1a 628 * or external trigger.
NYX 0:85b3fd62ea1a 629 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 630 * @retval SET (software start) or RESET (external trigger)
NYX 0:85b3fd62ea1a 631 */
NYX 0:85b3fd62ea1a 632 #define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) \
NYX 0:85b3fd62ea1a 633 (((__HANDLE__)->Instance->CR2 & ADC_CR2_EXTEN) == RESET)
NYX 0:85b3fd62ea1a 634
NYX 0:85b3fd62ea1a 635 /**
NYX 0:85b3fd62ea1a 636 * @brief Test if conversion trigger of injected group is software start
NYX 0:85b3fd62ea1a 637 * or external trigger.
NYX 0:85b3fd62ea1a 638 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 639 * @retval SET (software start) or RESET (external trigger)
NYX 0:85b3fd62ea1a 640 */
NYX 0:85b3fd62ea1a 641 #define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) \
NYX 0:85b3fd62ea1a 642 (((__HANDLE__)->Instance->CR2 & ADC_CR2_JEXTEN) == RESET)
NYX 0:85b3fd62ea1a 643
NYX 0:85b3fd62ea1a 644 /**
NYX 0:85b3fd62ea1a 645 * @brief Simultaneously clears and sets specific bits of the handle State
NYX 0:85b3fd62ea1a 646 * @note: ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(),
NYX 0:85b3fd62ea1a 647 * the first parameter is the ADC handle State, the second parameter is the
NYX 0:85b3fd62ea1a 648 * bit field to clear, the third and last parameter is the bit field to set.
NYX 0:85b3fd62ea1a 649 * @retval None
NYX 0:85b3fd62ea1a 650 */
NYX 0:85b3fd62ea1a 651 #define ADC_STATE_CLR_SET MODIFY_REG
NYX 0:85b3fd62ea1a 652
NYX 0:85b3fd62ea1a 653 /**
NYX 0:85b3fd62ea1a 654 * @brief Clear ADC error code (set it to error code: "no error")
NYX 0:85b3fd62ea1a 655 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 656 * @retval None
NYX 0:85b3fd62ea1a 657 */
NYX 0:85b3fd62ea1a 658 #define ADC_CLEAR_ERRORCODE(__HANDLE__) \
NYX 0:85b3fd62ea1a 659 ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)
NYX 0:85b3fd62ea1a 660
NYX 0:85b3fd62ea1a 661
NYX 0:85b3fd62ea1a 662 #define IS_ADC_CLOCKPRESCALER(ADC_CLOCK) (((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV2) || \
NYX 0:85b3fd62ea1a 663 ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV4) || \
NYX 0:85b3fd62ea1a 664 ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV6) || \
NYX 0:85b3fd62ea1a 665 ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV8))
NYX 0:85b3fd62ea1a 666 #define IS_ADC_SAMPLING_DELAY(DELAY) (((DELAY) == ADC_TWOSAMPLINGDELAY_5CYCLES) || \
NYX 0:85b3fd62ea1a 667 ((DELAY) == ADC_TWOSAMPLINGDELAY_6CYCLES) || \
NYX 0:85b3fd62ea1a 668 ((DELAY) == ADC_TWOSAMPLINGDELAY_7CYCLES) || \
NYX 0:85b3fd62ea1a 669 ((DELAY) == ADC_TWOSAMPLINGDELAY_8CYCLES) || \
NYX 0:85b3fd62ea1a 670 ((DELAY) == ADC_TWOSAMPLINGDELAY_9CYCLES) || \
NYX 0:85b3fd62ea1a 671 ((DELAY) == ADC_TWOSAMPLINGDELAY_10CYCLES) || \
NYX 0:85b3fd62ea1a 672 ((DELAY) == ADC_TWOSAMPLINGDELAY_11CYCLES) || \
NYX 0:85b3fd62ea1a 673 ((DELAY) == ADC_TWOSAMPLINGDELAY_12CYCLES) || \
NYX 0:85b3fd62ea1a 674 ((DELAY) == ADC_TWOSAMPLINGDELAY_13CYCLES) || \
NYX 0:85b3fd62ea1a 675 ((DELAY) == ADC_TWOSAMPLINGDELAY_14CYCLES) || \
NYX 0:85b3fd62ea1a 676 ((DELAY) == ADC_TWOSAMPLINGDELAY_15CYCLES) || \
NYX 0:85b3fd62ea1a 677 ((DELAY) == ADC_TWOSAMPLINGDELAY_16CYCLES) || \
NYX 0:85b3fd62ea1a 678 ((DELAY) == ADC_TWOSAMPLINGDELAY_17CYCLES) || \
NYX 0:85b3fd62ea1a 679 ((DELAY) == ADC_TWOSAMPLINGDELAY_18CYCLES) || \
NYX 0:85b3fd62ea1a 680 ((DELAY) == ADC_TWOSAMPLINGDELAY_19CYCLES) || \
NYX 0:85b3fd62ea1a 681 ((DELAY) == ADC_TWOSAMPLINGDELAY_20CYCLES))
NYX 0:85b3fd62ea1a 682 #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_RESOLUTION_12B) || \
NYX 0:85b3fd62ea1a 683 ((RESOLUTION) == ADC_RESOLUTION_10B) || \
NYX 0:85b3fd62ea1a 684 ((RESOLUTION) == ADC_RESOLUTION_8B) || \
NYX 0:85b3fd62ea1a 685 ((RESOLUTION) == ADC_RESOLUTION_6B))
NYX 0:85b3fd62ea1a 686 #define IS_ADC_EXT_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE) || \
NYX 0:85b3fd62ea1a 687 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING) || \
NYX 0:85b3fd62ea1a 688 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_FALLING) || \
NYX 0:85b3fd62ea1a 689 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING))
NYX 0:85b3fd62ea1a 690 #define IS_ADC_EXT_TRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || \
NYX 0:85b3fd62ea1a 691 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || \
NYX 0:85b3fd62ea1a 692 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3) || \
NYX 0:85b3fd62ea1a 693 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || \
NYX 0:85b3fd62ea1a 694 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3) || \
NYX 0:85b3fd62ea1a 695 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC4) || \
NYX 0:85b3fd62ea1a 696 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_TRGO) || \
NYX 0:85b3fd62ea1a 697 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1) || \
NYX 0:85b3fd62ea1a 698 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \
NYX 0:85b3fd62ea1a 699 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || \
NYX 0:85b3fd62ea1a 700 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1) || \
NYX 0:85b3fd62ea1a 701 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC2) || \
NYX 0:85b3fd62ea1a 702 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3) || \
NYX 0:85b3fd62ea1a 703 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1) || \
NYX 0:85b3fd62ea1a 704 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || \
NYX 0:85b3fd62ea1a 705 ((REGTRIG) == ADC_EXTERNALTRIGCONV_Ext_IT11)|| \
NYX 0:85b3fd62ea1a 706 ((REGTRIG) == ADC_SOFTWARE_START))
NYX 0:85b3fd62ea1a 707 #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || \
NYX 0:85b3fd62ea1a 708 ((ALIGN) == ADC_DATAALIGN_LEFT))
NYX 0:85b3fd62ea1a 709 #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SAMPLETIME_3CYCLES) || \
NYX 0:85b3fd62ea1a 710 ((TIME) == ADC_SAMPLETIME_15CYCLES) || \
NYX 0:85b3fd62ea1a 711 ((TIME) == ADC_SAMPLETIME_28CYCLES) || \
NYX 0:85b3fd62ea1a 712 ((TIME) == ADC_SAMPLETIME_56CYCLES) || \
NYX 0:85b3fd62ea1a 713 ((TIME) == ADC_SAMPLETIME_84CYCLES) || \
NYX 0:85b3fd62ea1a 714 ((TIME) == ADC_SAMPLETIME_112CYCLES) || \
NYX 0:85b3fd62ea1a 715 ((TIME) == ADC_SAMPLETIME_144CYCLES) || \
NYX 0:85b3fd62ea1a 716 ((TIME) == ADC_SAMPLETIME_480CYCLES))
NYX 0:85b3fd62ea1a 717 #define IS_ADC_EOCSelection(EOCSelection) (((EOCSelection) == ADC_EOC_SINGLE_CONV) || \
NYX 0:85b3fd62ea1a 718 ((EOCSelection) == ADC_EOC_SEQ_CONV) || \
NYX 0:85b3fd62ea1a 719 ((EOCSelection) == ADC_EOC_SINGLE_SEQ_CONV))
NYX 0:85b3fd62ea1a 720 #define IS_ADC_EVENT_TYPE(EVENT) (((EVENT) == ADC_AWD_EVENT) || \
NYX 0:85b3fd62ea1a 721 ((EVENT) == ADC_OVR_EVENT))
NYX 0:85b3fd62ea1a 722 #define IS_ADC_ANALOG_WATCHDOG(WATCHDOG) (((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG) || \
NYX 0:85b3fd62ea1a 723 ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC) || \
NYX 0:85b3fd62ea1a 724 ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC) || \
NYX 0:85b3fd62ea1a 725 ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG) || \
NYX 0:85b3fd62ea1a 726 ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC) || \
NYX 0:85b3fd62ea1a 727 ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC) || \
NYX 0:85b3fd62ea1a 728 ((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE))
NYX 0:85b3fd62ea1a 729 #define IS_ADC_CHANNELS_TYPE(CHANNEL_TYPE) (((CHANNEL_TYPE) == ADC_ALL_CHANNELS) || \
NYX 0:85b3fd62ea1a 730 ((CHANNEL_TYPE) == ADC_REGULAR_CHANNELS) || \
NYX 0:85b3fd62ea1a 731 ((CHANNEL_TYPE) == ADC_INJECTED_CHANNELS))
NYX 0:85b3fd62ea1a 732 #define IS_ADC_THRESHOLD(THRESHOLD) ((THRESHOLD) <= 0xFFFU)
NYX 0:85b3fd62ea1a 733
NYX 0:85b3fd62ea1a 734 #define IS_ADC_REGULAR_LENGTH(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 16U))
NYX 0:85b3fd62ea1a 735 #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= 1U) && ((RANK) <= (16U)))
NYX 0:85b3fd62ea1a 736 #define IS_ADC_REGULAR_DISC_NUMBER(NUMBER) (((NUMBER) >= 1U) && ((NUMBER) <= 8U))
NYX 0:85b3fd62ea1a 737 #define IS_ADC_RANGE(RESOLUTION, ADC_VALUE) \
NYX 0:85b3fd62ea1a 738 ((((RESOLUTION) == ADC_RESOLUTION_12B) && ((ADC_VALUE) <= 0x0FFFU)) || \
NYX 0:85b3fd62ea1a 739 (((RESOLUTION) == ADC_RESOLUTION_10B) && ((ADC_VALUE) <= 0x03FFU)) || \
NYX 0:85b3fd62ea1a 740 (((RESOLUTION) == ADC_RESOLUTION_8B) && ((ADC_VALUE) <= 0x00FFU)) || \
NYX 0:85b3fd62ea1a 741 (((RESOLUTION) == ADC_RESOLUTION_6B) && ((ADC_VALUE) <= 0x003FU)))
NYX 0:85b3fd62ea1a 742
NYX 0:85b3fd62ea1a 743 /**
NYX 0:85b3fd62ea1a 744 * @brief Set ADC Regular channel sequence length.
NYX 0:85b3fd62ea1a 745 * @param _NbrOfConversion_: Regular channel sequence length.
NYX 0:85b3fd62ea1a 746 * @retval None
NYX 0:85b3fd62ea1a 747 */
NYX 0:85b3fd62ea1a 748 #define ADC_SQR1(_NbrOfConversion_) (((_NbrOfConversion_) - (uint8_t)1U) << 20U)
NYX 0:85b3fd62ea1a 749
NYX 0:85b3fd62ea1a 750 /**
NYX 0:85b3fd62ea1a 751 * @brief Set the ADC's sample time for channel numbers between 10 and 18.
NYX 0:85b3fd62ea1a 752 * @param _SAMPLETIME_: Sample time parameter.
NYX 0:85b3fd62ea1a 753 * @param _CHANNELNB_: Channel number.
NYX 0:85b3fd62ea1a 754 * @retval None
NYX 0:85b3fd62ea1a 755 */
NYX 0:85b3fd62ea1a 756 #define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (3U * (((uint32_t)((uint16_t)(_CHANNELNB_))) - 10U)))
NYX 0:85b3fd62ea1a 757
NYX 0:85b3fd62ea1a 758 /**
NYX 0:85b3fd62ea1a 759 * @brief Set the ADC's sample time for channel numbers between 0 and 9.
NYX 0:85b3fd62ea1a 760 * @param _SAMPLETIME_: Sample time parameter.
NYX 0:85b3fd62ea1a 761 * @param _CHANNELNB_: Channel number.
NYX 0:85b3fd62ea1a 762 * @retval None
NYX 0:85b3fd62ea1a 763 */
NYX 0:85b3fd62ea1a 764 #define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (3U * ((uint32_t)((uint16_t)(_CHANNELNB_)))))
NYX 0:85b3fd62ea1a 765
NYX 0:85b3fd62ea1a 766 /**
NYX 0:85b3fd62ea1a 767 * @brief Set the selected regular channel rank for rank between 1 and 6.
NYX 0:85b3fd62ea1a 768 * @param _CHANNELNB_: Channel number.
NYX 0:85b3fd62ea1a 769 * @param _RANKNB_: Rank number.
NYX 0:85b3fd62ea1a 770 * @retval None
NYX 0:85b3fd62ea1a 771 */
NYX 0:85b3fd62ea1a 772 #define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 1U)))
NYX 0:85b3fd62ea1a 773
NYX 0:85b3fd62ea1a 774 /**
NYX 0:85b3fd62ea1a 775 * @brief Set the selected regular channel rank for rank between 7 and 12.
NYX 0:85b3fd62ea1a 776 * @param _CHANNELNB_: Channel number.
NYX 0:85b3fd62ea1a 777 * @param _RANKNB_: Rank number.
NYX 0:85b3fd62ea1a 778 * @retval None
NYX 0:85b3fd62ea1a 779 */
NYX 0:85b3fd62ea1a 780 #define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 7U)))
NYX 0:85b3fd62ea1a 781
NYX 0:85b3fd62ea1a 782 /**
NYX 0:85b3fd62ea1a 783 * @brief Set the selected regular channel rank for rank between 13 and 16.
NYX 0:85b3fd62ea1a 784 * @param _CHANNELNB_: Channel number.
NYX 0:85b3fd62ea1a 785 * @param _RANKNB_: Rank number.
NYX 0:85b3fd62ea1a 786 * @retval None
NYX 0:85b3fd62ea1a 787 */
NYX 0:85b3fd62ea1a 788 #define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * ((_RANKNB_) - 13U)))
NYX 0:85b3fd62ea1a 789
NYX 0:85b3fd62ea1a 790 /**
NYX 0:85b3fd62ea1a 791 * @brief Enable ADC continuous conversion mode.
NYX 0:85b3fd62ea1a 792 * @param _CONTINUOUS_MODE_: Continuous mode.
NYX 0:85b3fd62ea1a 793 * @retval None
NYX 0:85b3fd62ea1a 794 */
NYX 0:85b3fd62ea1a 795 #define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << 1U)
NYX 0:85b3fd62ea1a 796
NYX 0:85b3fd62ea1a 797 /**
NYX 0:85b3fd62ea1a 798 * @brief Configures the number of discontinuous conversions for the regular group channels.
NYX 0:85b3fd62ea1a 799 * @param _NBR_DISCONTINUOUSCONV_: Number of discontinuous conversions.
NYX 0:85b3fd62ea1a 800 * @retval None
NYX 0:85b3fd62ea1a 801 */
NYX 0:85b3fd62ea1a 802 #define ADC_CR1_DISCONTINUOUS(_NBR_DISCONTINUOUSCONV_) (((_NBR_DISCONTINUOUSCONV_) - 1U) << POSITION_VAL(ADC_CR1_DISCNUM))
NYX 0:85b3fd62ea1a 803
NYX 0:85b3fd62ea1a 804 /**
NYX 0:85b3fd62ea1a 805 * @brief Enable ADC scan mode.
NYX 0:85b3fd62ea1a 806 * @param _SCANCONV_MODE_: Scan conversion mode.
NYX 0:85b3fd62ea1a 807 * @retval None
NYX 0:85b3fd62ea1a 808 */
NYX 0:85b3fd62ea1a 809 #define ADC_CR1_SCANCONV(_SCANCONV_MODE_) ((_SCANCONV_MODE_) << 8U)
NYX 0:85b3fd62ea1a 810
NYX 0:85b3fd62ea1a 811 /**
NYX 0:85b3fd62ea1a 812 * @brief Enable the ADC end of conversion selection.
NYX 0:85b3fd62ea1a 813 * @param _EOCSelection_MODE_: End of conversion selection mode.
NYX 0:85b3fd62ea1a 814 * @retval None
NYX 0:85b3fd62ea1a 815 */
NYX 0:85b3fd62ea1a 816 #define ADC_CR2_EOCSelection(_EOCSelection_MODE_) ((_EOCSelection_MODE_) << 10U)
NYX 0:85b3fd62ea1a 817
NYX 0:85b3fd62ea1a 818 /**
NYX 0:85b3fd62ea1a 819 * @brief Enable the ADC DMA continuous request.
NYX 0:85b3fd62ea1a 820 * @param _DMAContReq_MODE_: DMA continuous request mode.
NYX 0:85b3fd62ea1a 821 * @retval None
NYX 0:85b3fd62ea1a 822 */
NYX 0:85b3fd62ea1a 823 #define ADC_CR2_DMAContReq(_DMAContReq_MODE_) ((_DMAContReq_MODE_) << 9U)
NYX 0:85b3fd62ea1a 824
NYX 0:85b3fd62ea1a 825 /**
NYX 0:85b3fd62ea1a 826 * @brief Return resolution bits in CR1 register.
NYX 0:85b3fd62ea1a 827 * @param __HANDLE__: ADC handle
NYX 0:85b3fd62ea1a 828 * @retval None
NYX 0:85b3fd62ea1a 829 */
NYX 0:85b3fd62ea1a 830 #define ADC_GET_RESOLUTION(__HANDLE__) (((__HANDLE__)->Instance->CR1) & ADC_CR1_RES)
NYX 0:85b3fd62ea1a 831
NYX 0:85b3fd62ea1a 832 /**
NYX 0:85b3fd62ea1a 833 * @}
NYX 0:85b3fd62ea1a 834 */
NYX 0:85b3fd62ea1a 835
NYX 0:85b3fd62ea1a 836 /* Private functions ---------------------------------------------------------*/
NYX 0:85b3fd62ea1a 837 /** @defgroup ADC_Private_Functions ADC Private Functions
NYX 0:85b3fd62ea1a 838 * @{
NYX 0:85b3fd62ea1a 839 */
NYX 0:85b3fd62ea1a 840
NYX 0:85b3fd62ea1a 841 /**
NYX 0:85b3fd62ea1a 842 * @}
NYX 0:85b3fd62ea1a 843 */
NYX 0:85b3fd62ea1a 844
NYX 0:85b3fd62ea1a 845 /**
NYX 0:85b3fd62ea1a 846 * @}
NYX 0:85b3fd62ea1a 847 */
NYX 0:85b3fd62ea1a 848
NYX 0:85b3fd62ea1a 849 /**
NYX 0:85b3fd62ea1a 850 * @}
NYX 0:85b3fd62ea1a 851 */
NYX 0:85b3fd62ea1a 852
NYX 0:85b3fd62ea1a 853 #ifdef __cplusplus
NYX 0:85b3fd62ea1a 854 }
NYX 0:85b3fd62ea1a 855 #endif
NYX 0:85b3fd62ea1a 856
NYX 0:85b3fd62ea1a 857 #endif /*__STM32F4xx_ADC_H */
NYX 0:85b3fd62ea1a 858
NYX 0:85b3fd62ea1a 859
NYX 0:85b3fd62ea1a 860 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/