I2C_EEPROM

Committer:
jhon309
Date:
Thu Aug 13 00:23:16 2015 +0000
Revision:
0:ac8863619623
I2C

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jhon309 0:ac8863619623 1 /**
jhon309 0:ac8863619623 2 ******************************************************************************
jhon309 0:ac8863619623 3 * @file stm32f0xx_hal_adc.h
jhon309 0:ac8863619623 4 * @author MCD Application Team
jhon309 0:ac8863619623 5 * @version V1.2.0
jhon309 0:ac8863619623 6 * @date 11-December-2014
jhon309 0:ac8863619623 7 * @brief Header file containing functions prototypes of ADC HAL library.
jhon309 0:ac8863619623 8 ******************************************************************************
jhon309 0:ac8863619623 9 * @attention
jhon309 0:ac8863619623 10 *
jhon309 0:ac8863619623 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
jhon309 0:ac8863619623 12 *
jhon309 0:ac8863619623 13 * Redistribution and use in source and binary forms, with or without modification,
jhon309 0:ac8863619623 14 * are permitted provided that the following conditions are met:
jhon309 0:ac8863619623 15 * 1. Redistributions of source code must retain the above copyright notice,
jhon309 0:ac8863619623 16 * this list of conditions and the following disclaimer.
jhon309 0:ac8863619623 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
jhon309 0:ac8863619623 18 * this list of conditions and the following disclaimer in the documentation
jhon309 0:ac8863619623 19 * and/or other materials provided with the distribution.
jhon309 0:ac8863619623 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
jhon309 0:ac8863619623 21 * may be used to endorse or promote products derived from this software
jhon309 0:ac8863619623 22 * without specific prior written permission.
jhon309 0:ac8863619623 23 *
jhon309 0:ac8863619623 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
jhon309 0:ac8863619623 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
jhon309 0:ac8863619623 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
jhon309 0:ac8863619623 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
jhon309 0:ac8863619623 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
jhon309 0:ac8863619623 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
jhon309 0:ac8863619623 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
jhon309 0:ac8863619623 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
jhon309 0:ac8863619623 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
jhon309 0:ac8863619623 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
jhon309 0:ac8863619623 34 *
jhon309 0:ac8863619623 35 ******************************************************************************
jhon309 0:ac8863619623 36 */
jhon309 0:ac8863619623 37
jhon309 0:ac8863619623 38 /* Define to prevent recursive inclusion -------------------------------------*/
jhon309 0:ac8863619623 39 #ifndef __STM32F0xx_HAL_ADC_H
jhon309 0:ac8863619623 40 #define __STM32F0xx_HAL_ADC_H
jhon309 0:ac8863619623 41
jhon309 0:ac8863619623 42 #ifdef __cplusplus
jhon309 0:ac8863619623 43 extern "C" {
jhon309 0:ac8863619623 44 #endif
jhon309 0:ac8863619623 45
jhon309 0:ac8863619623 46 /* Includes ------------------------------------------------------------------*/
jhon309 0:ac8863619623 47 #include "stm32f0xx_hal_def.h"
jhon309 0:ac8863619623 48
jhon309 0:ac8863619623 49 /** @addtogroup STM32F0xx_HAL_Driver
jhon309 0:ac8863619623 50 * @{
jhon309 0:ac8863619623 51 */
jhon309 0:ac8863619623 52
jhon309 0:ac8863619623 53 /** @addtogroup ADC
jhon309 0:ac8863619623 54 * @{
jhon309 0:ac8863619623 55 */
jhon309 0:ac8863619623 56
jhon309 0:ac8863619623 57 /* Exported types ------------------------------------------------------------*/
jhon309 0:ac8863619623 58 /** @defgroup ADC_Exported_Types ADC Exported Types
jhon309 0:ac8863619623 59 * @{
jhon309 0:ac8863619623 60 */
jhon309 0:ac8863619623 61
jhon309 0:ac8863619623 62 /**
jhon309 0:ac8863619623 63 * @brief Structure definition of ADC initialization and regular group
jhon309 0:ac8863619623 64 * @note The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.
jhon309 0:ac8863619623 65 * ADC state can be either:
jhon309 0:ac8863619623 66 * - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ClockPrescaler')
jhon309 0:ac8863619623 67 * - For all parameters except 'ClockPrescaler': ADC enabled without conversion on going on regular group.
jhon309 0:ac8863619623 68 * If ADC is not in the appropriate state to modify some parameters, these parameters setting is bypassed
jhon309 0:ac8863619623 69 * 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).
jhon309 0:ac8863619623 70 */
jhon309 0:ac8863619623 71 typedef struct
jhon309 0:ac8863619623 72 {
jhon309 0:ac8863619623 73 uint32_t ClockPrescaler; /*!< Select ADC clock source (synchronous clock derived from APB clock or asynchronous clock derived from ADC dedicated HSI RC oscillator 14MHz) and clock prescaler.
jhon309 0:ac8863619623 74 This parameter can be a value of @ref ADC_ClockPrescaler
jhon309 0:ac8863619623 75 Note: In case of usage of the ADC dedicated HSI RC oscillator, it must be preliminarily enabled at RCC top level.
jhon309 0:ac8863619623 76 Note: This parameter can be modified only if the ADC is disabled */
jhon309 0:ac8863619623 77 uint32_t Resolution; /*!< Configures the ADC resolution.
jhon309 0:ac8863619623 78 This parameter can be a value of @ref ADC_Resolution */
jhon309 0:ac8863619623 79 uint32_t DataAlign; /*!< Specifies whether the ADC data alignment is left or right.
jhon309 0:ac8863619623 80 This parameter can be a value of @ref ADC_Data_align */
jhon309 0:ac8863619623 81 uint32_t ScanConvMode; /*!< Configures the sequencer of regular group.
jhon309 0:ac8863619623 82 This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.
jhon309 0:ac8863619623 83 Sequencer is automatically enabled if several channels are set (sequencer cannot be disabled, as it can be the case on other STM32 devices):
jhon309 0:ac8863619623 84 If only 1 channel is set: Conversion is performed in single mode.
jhon309 0:ac8863619623 85 If several channels are set: Conversions are performed in sequence mode (ranks defined by each channel number: channel 0 fixed on rank 0, channel 1 fixed on rank1, ...).
jhon309 0:ac8863619623 86 Scan direction can be set to forward (from channel 0 to channel 18) or backward (from channel 18 to channel 0).
jhon309 0:ac8863619623 87 This parameter can be a value of @ref ADC_Scan_mode */
jhon309 0:ac8863619623 88 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.
jhon309 0:ac8863619623 89 This parameter can be a value of @ref ADC_EOCSelection. */
jhon309 0:ac8863619623 90 uint32_t LowPowerAutoWait; /*!< Selects the dynamic low power Auto Delay: new conversion start only when the previous
jhon309 0:ac8863619623 91 conversion (for regular group) or previous sequence (for injected group) has been treated by user software.
jhon309 0:ac8863619623 92 This feature automatically adapts the speed of ADC to the speed of the system that reads the data. Moreover, this avoids risk of overrun for low frequency applications.
jhon309 0:ac8863619623 93 This parameter can be set to ENABLE or DISABLE.
jhon309 0:ac8863619623 94 Note: Do not use with interruption or DMA (HAL_ADC_Start_IT(), HAL_ADC_Start_DMA()) since they have to clear immediately the EOC flag to free the IRQ vector sequencer.
jhon309 0:ac8863619623 95 Do use with polling: 1. Start conversion with HAL_ADC_Start(), 2. Later on, when conversion data is needed: use HAL_ADC_PollForConversion() to ensure that conversion is completed
jhon309 0:ac8863619623 96 and use HAL_ADC_GetValue() to retrieve conversion result and trig another conversion. */
jhon309 0:ac8863619623 97 uint32_t LowPowerAutoPowerOff; /*!< Selects the auto-off mode: the ADC automatically powers-off after a conversion and automatically wakes-up when a new conversion is triggered (with startup time between trigger and start of sampling).
jhon309 0:ac8863619623 98 This feature can be combined with automatic wait mode (parameter 'LowPowerAutoWait').
jhon309 0:ac8863619623 99 This parameter can be set to ENABLE or DISABLE.
jhon309 0:ac8863619623 100 Note: If enabled, this feature also turns off the ADC dedicated 14 MHz RC oscillator (HSI14) */
jhon309 0:ac8863619623 101 uint32_t ContinuousConvMode; /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,
jhon309 0:ac8863619623 102 after the selected trigger occurred (software start or external trigger).
jhon309 0:ac8863619623 103 This parameter can be set to ENABLE or DISABLE. */
jhon309 0:ac8863619623 104 uint32_t DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).
jhon309 0:ac8863619623 105 Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.
jhon309 0:ac8863619623 106 Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.
jhon309 0:ac8863619623 107 This parameter can be set to ENABLE or DISABLE
jhon309 0:ac8863619623 108 Note: Number of discontinuous ranks increment is fixed to one-by-one. */
jhon309 0:ac8863619623 109 uint32_t ExternalTrigConv; /*!< Selects the external event used to trigger the conversion start of regular group.
jhon309 0:ac8863619623 110 If set to ADC_SOFTWARE_START, external triggers are disabled.
jhon309 0:ac8863619623 111 This parameter can be a value of @ref ADC_External_trigger_source_Regular */
jhon309 0:ac8863619623 112 uint32_t ExternalTrigConvEdge; /*!< Selects the external trigger edge of regular group.
jhon309 0:ac8863619623 113 If trigger is set to ADC_SOFTWARE_START, this parameter is discarded.
jhon309 0:ac8863619623 114 This parameter can be a value of @ref ADC_External_trigger_edge_Regular */
jhon309 0:ac8863619623 115 uint32_t DMAContinuousRequests; /*!< Specifies whether the DMA requests are performed in one shot mode (DMA transfer stop when number of conversions is reached)
jhon309 0:ac8863619623 116 or in Continuous mode (DMA transfer unlimited, whatever number of conversions).
jhon309 0:ac8863619623 117 Note: In continuous mode, DMA must be configured in circular mode. Otherwise an overrun will be triggered when DMA buffer maximum pointer is reached.
jhon309 0:ac8863619623 118 This parameter can be set to ENABLE or DISABLE. */
jhon309 0:ac8863619623 119 uint32_t Overrun; /*!< Select the behaviour in case of overrun: data preserved or overwritten
jhon309 0:ac8863619623 120 This parameter has an effect on regular group only, including in DMA mode.
jhon309 0:ac8863619623 121 This parameter can be a value of @ref ADC_Overrun */
jhon309 0:ac8863619623 122 }ADC_InitTypeDef;
jhon309 0:ac8863619623 123
jhon309 0:ac8863619623 124 /**
jhon309 0:ac8863619623 125 * @brief Structure definition of ADC channel for regular group
jhon309 0:ac8863619623 126 * @note The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.
jhon309 0:ac8863619623 127 * ADC state can be either:
jhon309 0:ac8863619623 128 * - For all parameters: ADC disabled or enabled without conversion on going on regular group.
jhon309 0:ac8863619623 129 * If ADC is not in the appropriate state to modify some parameters, these parameters setting is bypassed
jhon309 0:ac8863619623 130 * 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).
jhon309 0:ac8863619623 131 */
jhon309 0:ac8863619623 132 typedef struct
jhon309 0:ac8863619623 133 {
jhon309 0:ac8863619623 134 uint32_t Channel; /*!< Specifies the channel to configure into ADC regular group.
jhon309 0:ac8863619623 135 This parameter can be a value of @ref ADC_channels
jhon309 0:ac8863619623 136 Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability. */
jhon309 0:ac8863619623 137 uint32_t Rank; /*!< Add or remove the channel from ADC regular group sequencer.
jhon309 0:ac8863619623 138 On STM32F0 devices, rank is defined by each channel number (channel 0 fixed on rank 0, channel 1 fixed on rank1, ...).
jhon309 0:ac8863619623 139 Despite the channel rank is fixed, this parameter allow an additional possibility: to remove the selected rank (selected channel) from sequencer.
jhon309 0:ac8863619623 140 This parameter can be a value of @ref ADC_rank */
jhon309 0:ac8863619623 141 uint32_t SamplingTime; /*!< Sampling time value to be set for the selected channel.
jhon309 0:ac8863619623 142 Unit: ADC clock cycles
jhon309 0:ac8863619623 143 Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits, 10.5 cycles at 10 bits, 8.5 cycles at 8 bits, 6.5 cycles at 6 bits).
jhon309 0:ac8863619623 144 This parameter can be a value of @ref ADC_sampling_times
jhon309 0:ac8863619623 145 Caution: this setting impacts the entire regular group. Therefore, call of HAL_ADC_ConfigChannel() to configure a channel can impact the configuration of other channels previously set.
jhon309 0:ac8863619623 146 Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor),
jhon309 0:ac8863619623 147 sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)
jhon309 0:ac8863619623 148 Refer to device datasheet for timings values, parameters TS_vrefint, TS_vbat, TS_temp (values rough order: 5us to 17us). */
jhon309 0:ac8863619623 149 }ADC_ChannelConfTypeDef;
jhon309 0:ac8863619623 150
jhon309 0:ac8863619623 151 /**
jhon309 0:ac8863619623 152 * @brief Structure definition of ADC analog watchdog
jhon309 0:ac8863619623 153 * @note The setting of these parameters with function HAL_ADC_AnalogWDGConfig() is conditioned to ADC state.
jhon309 0:ac8863619623 154 * ADC state can be either: ADC disabled or ADC enabled without conversion on going on regular group.
jhon309 0:ac8863619623 155 */
jhon309 0:ac8863619623 156 typedef struct
jhon309 0:ac8863619623 157 {
jhon309 0:ac8863619623 158 uint32_t WatchdogMode; /*!< Configures the ADC analog watchdog mode: single/all/none channels.
jhon309 0:ac8863619623 159 This parameter can be a value of @ref ADC_analog_watchdog_mode. */
jhon309 0:ac8863619623 160 uint32_t Channel; /*!< Selects which ADC channel to monitor by analog watchdog.
jhon309 0:ac8863619623 161 This parameter has an effect only if parameter 'WatchdogMode' is configured on single channel. Only 1 channel can be monitored.
jhon309 0:ac8863619623 162 This parameter can be a value of @ref ADC_channels. */
jhon309 0:ac8863619623 163 uint32_t ITMode; /*!< Specifies whether the analog watchdog is configured in interrupt or polling mode.
jhon309 0:ac8863619623 164 This parameter can be set to ENABLE or DISABLE */
jhon309 0:ac8863619623 165 uint32_t HighThreshold; /*!< Configures the ADC analog watchdog High threshold value.
jhon309 0:ac8863619623 166 Depending of ADC resolution selected (12, 10, 8 or 6 bits), this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */
jhon309 0:ac8863619623 167 uint32_t LowThreshold; /*!< Configures the ADC analog watchdog High threshold value.
jhon309 0:ac8863619623 168 Depending of ADC resolution selected (12, 10, 8 or 6 bits), this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */
jhon309 0:ac8863619623 169 }ADC_AnalogWDGConfTypeDef;
jhon309 0:ac8863619623 170
jhon309 0:ac8863619623 171 /**
jhon309 0:ac8863619623 172 * @brief HAL ADC state machine: ADC States structure definition
jhon309 0:ac8863619623 173 */
jhon309 0:ac8863619623 174 typedef enum
jhon309 0:ac8863619623 175 {
jhon309 0:ac8863619623 176 HAL_ADC_STATE_RESET = 0x00, /*!< ADC not yet initialized or disabled */
jhon309 0:ac8863619623 177 HAL_ADC_STATE_READY = 0x01, /*!< ADC peripheral ready for use */
jhon309 0:ac8863619623 178 HAL_ADC_STATE_BUSY = 0x02, /*!< An internal process is ongoing */
jhon309 0:ac8863619623 179 HAL_ADC_STATE_BUSY_REG = 0x12, /*!< Regular conversion is ongoing */
jhon309 0:ac8863619623 180 HAL_ADC_STATE_BUSY_INJ = 0x22, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring an injected group) */
jhon309 0:ac8863619623 181 HAL_ADC_STATE_BUSY_INJ_REG = 0x32, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring an injected group) */
jhon309 0:ac8863619623 182 HAL_ADC_STATE_TIMEOUT = 0x03, /*!< Timeout state */
jhon309 0:ac8863619623 183 HAL_ADC_STATE_ERROR = 0x04, /*!< ADC state error */
jhon309 0:ac8863619623 184 HAL_ADC_STATE_EOC = 0x05, /*!< Conversion is completed */
jhon309 0:ac8863619623 185 HAL_ADC_STATE_EOC_REG = 0x15, /*!< Regular conversion is completed */
jhon309 0:ac8863619623 186 HAL_ADC_STATE_EOC_INJ = 0x25, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring an injected group) */
jhon309 0:ac8863619623 187 HAL_ADC_STATE_EOC_INJ_REG = 0x35, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring an injected group) */
jhon309 0:ac8863619623 188 HAL_ADC_STATE_AWD = 0x06, /*!< ADC state analog watchdog */
jhon309 0:ac8863619623 189 HAL_ADC_STATE_AWD2 = 0x07, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring several AWD) */
jhon309 0:ac8863619623 190 HAL_ADC_STATE_AWD3 = 0x08, /*!< Not used on STM32F0xx devices (kept for compatibility with other devices featuring several AWD) */
jhon309 0:ac8863619623 191 }HAL_ADC_StateTypeDef;
jhon309 0:ac8863619623 192
jhon309 0:ac8863619623 193 /**
jhon309 0:ac8863619623 194 * @brief ADC handle Structure definition
jhon309 0:ac8863619623 195 */
jhon309 0:ac8863619623 196 typedef struct
jhon309 0:ac8863619623 197 {
jhon309 0:ac8863619623 198 ADC_TypeDef *Instance; /*!< Register base address */
jhon309 0:ac8863619623 199
jhon309 0:ac8863619623 200 ADC_InitTypeDef Init; /*!< ADC required parameters */
jhon309 0:ac8863619623 201
jhon309 0:ac8863619623 202 __IO uint32_t NbrOfConversionRank ; /*!< ADC conversion rank counter */
jhon309 0:ac8863619623 203
jhon309 0:ac8863619623 204 DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */
jhon309 0:ac8863619623 205
jhon309 0:ac8863619623 206 HAL_LockTypeDef Lock; /*!< ADC locking object */
jhon309 0:ac8863619623 207
jhon309 0:ac8863619623 208 __IO HAL_ADC_StateTypeDef State; /*!< ADC communication state */
jhon309 0:ac8863619623 209
jhon309 0:ac8863619623 210 __IO uint32_t ErrorCode; /*!< ADC Error code */
jhon309 0:ac8863619623 211 }ADC_HandleTypeDef;
jhon309 0:ac8863619623 212 /**
jhon309 0:ac8863619623 213 * @}
jhon309 0:ac8863619623 214 */
jhon309 0:ac8863619623 215
jhon309 0:ac8863619623 216
jhon309 0:ac8863619623 217
jhon309 0:ac8863619623 218 /* Exported constants --------------------------------------------------------*/
jhon309 0:ac8863619623 219
jhon309 0:ac8863619623 220 /** @defgroup ADC_Exported_Constants ADC Exported Constants
jhon309 0:ac8863619623 221 * @{
jhon309 0:ac8863619623 222 */
jhon309 0:ac8863619623 223
jhon309 0:ac8863619623 224 /** @defgroup ADC_Error_Code ADC Error Code
jhon309 0:ac8863619623 225 * @{
jhon309 0:ac8863619623 226 */
jhon309 0:ac8863619623 227 #define HAL_ADC_ERROR_NONE ((uint32_t)0x00) /*!< No error */
jhon309 0:ac8863619623 228 #define HAL_ADC_ERROR_INTERNAL ((uint32_t)0x01) /*!< ADC IP internal error: if problem of clocking,
jhon309 0:ac8863619623 229 enable/disable, erroneous state */
jhon309 0:ac8863619623 230 #define HAL_ADC_ERROR_OVR ((uint32_t)0x02) /*!< Overrun error */
jhon309 0:ac8863619623 231 #define HAL_ADC_ERROR_DMA ((uint32_t)0x04) /*!< DMA transfer error */
jhon309 0:ac8863619623 232
jhon309 0:ac8863619623 233 /**
jhon309 0:ac8863619623 234 * @}
jhon309 0:ac8863619623 235 */
jhon309 0:ac8863619623 236
jhon309 0:ac8863619623 237 /** @defgroup ADC_ClockPrescaler ADC ClockPrescaler
jhon309 0:ac8863619623 238 * @{
jhon309 0:ac8863619623 239 */
jhon309 0:ac8863619623 240 #define ADC_CLOCK_ASYNC ((uint32_t)0x00000000) /*!< ADC asynchronous clock derived from ADC dedicated HSI */
jhon309 0:ac8863619623 241
jhon309 0:ac8863619623 242 #define ADC_CLOCK_SYNC_PCLK_DIV2 ((uint32_t)ADC_CFGR2_CKMODE_0) /*!< ADC synchronous clock derived from AHB clock divided by a prescaler of 2 */
jhon309 0:ac8863619623 243 #define ADC_CLOCK_SYNC_PCLK_DIV4 ((uint32_t)ADC_CFGR2_CKMODE_1) /*!< ADC synchronous clock derived from AHB clock divided by a prescaler of 4 */
jhon309 0:ac8863619623 244
jhon309 0:ac8863619623 245 #define ADC_CLOCKPRESCALER_PCLK_DIV2 ADC_CLOCK_SYNC_PCLK_DIV2 /* Obsolete naming, kept for compatibility with some other devices */
jhon309 0:ac8863619623 246 #define ADC_CLOCKPRESCALER_PCLK_DIV4 ADC_CLOCK_SYNC_PCLK_DIV4 /* Obsolete naming, kept for compatibility with some other devices */
jhon309 0:ac8863619623 247
jhon309 0:ac8863619623 248 #define IS_ADC_CLOCKPRESCALER(ADC_CLOCK) (((ADC_CLOCK) == ADC_CLOCK_ASYNC) || \
jhon309 0:ac8863619623 249 ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV2) || \
jhon309 0:ac8863619623 250 ((ADC_CLOCK) == ADC_CLOCK_SYNC_PCLK_DIV4) )
jhon309 0:ac8863619623 251
jhon309 0:ac8863619623 252 /**
jhon309 0:ac8863619623 253 * @}
jhon309 0:ac8863619623 254 */
jhon309 0:ac8863619623 255
jhon309 0:ac8863619623 256 /** @defgroup ADC_Resolution ADC Resolution
jhon309 0:ac8863619623 257 * @{
jhon309 0:ac8863619623 258 */
jhon309 0:ac8863619623 259 #define ADC_RESOLUTION12b ((uint32_t)0x00000000) /*!< ADC 12-bit resolution */
jhon309 0:ac8863619623 260 #define ADC_RESOLUTION10b ((uint32_t)ADC_CFGR1_RES_0) /*!< ADC 10-bit resolution */
jhon309 0:ac8863619623 261 #define ADC_RESOLUTION8b ((uint32_t)ADC_CFGR1_RES_1) /*!< ADC 8-bit resolution */
jhon309 0:ac8863619623 262 #define ADC_RESOLUTION6b ((uint32_t)ADC_CFGR1_RES) /*!< ADC 6-bit resolution */
jhon309 0:ac8863619623 263
jhon309 0:ac8863619623 264 #define IS_ADC_RESOLUTION(RESOLUTION) (((RESOLUTION) == ADC_RESOLUTION12b) || \
jhon309 0:ac8863619623 265 ((RESOLUTION) == ADC_RESOLUTION10b) || \
jhon309 0:ac8863619623 266 ((RESOLUTION) == ADC_RESOLUTION8b) || \
jhon309 0:ac8863619623 267 ((RESOLUTION) == ADC_RESOLUTION6b) )
jhon309 0:ac8863619623 268 /**
jhon309 0:ac8863619623 269 * @}
jhon309 0:ac8863619623 270 */
jhon309 0:ac8863619623 271
jhon309 0:ac8863619623 272 /** @defgroup ADC_Data_align ADC Data_align
jhon309 0:ac8863619623 273 * @{
jhon309 0:ac8863619623 274 */
jhon309 0:ac8863619623 275 #define ADC_DATAALIGN_RIGHT ((uint32_t)0x00000000)
jhon309 0:ac8863619623 276 #define ADC_DATAALIGN_LEFT ((uint32_t)ADC_CFGR1_ALIGN)
jhon309 0:ac8863619623 277
jhon309 0:ac8863619623 278 #define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || \
jhon309 0:ac8863619623 279 ((ALIGN) == ADC_DATAALIGN_LEFT) )
jhon309 0:ac8863619623 280 /**
jhon309 0:ac8863619623 281 * @}
jhon309 0:ac8863619623 282 */
jhon309 0:ac8863619623 283
jhon309 0:ac8863619623 284 /** @defgroup ADC_Scan_mode ADC Scan mode
jhon309 0:ac8863619623 285 * @{
jhon309 0:ac8863619623 286 */
jhon309 0:ac8863619623 287 /* Note: Scan mode values must be compatible with other STM32 devices having */
jhon309 0:ac8863619623 288 /* a configurable sequencer. */
jhon309 0:ac8863619623 289 /* Scan direction setting values are defined by taking in account */
jhon309 0:ac8863619623 290 /* already defined values for other STM32 devices: */
jhon309 0:ac8863619623 291 /* ADC_SCAN_DISABLE ((uint32_t)0x00000000) */
jhon309 0:ac8863619623 292 /* ADC_SCAN_ENABLE ((uint32_t)0x00000001) */
jhon309 0:ac8863619623 293 /* Scan direction forward is considered as default setting equivalent */
jhon309 0:ac8863619623 294 /* to scan enable. */
jhon309 0:ac8863619623 295 /* Scan direction backward is considered as additional setting. */
jhon309 0:ac8863619623 296 /* In case of migration from another STM32 device, the user will be */
jhon309 0:ac8863619623 297 /* warned of change of setting choices with assert check. */
jhon309 0:ac8863619623 298 #define ADC_SCAN_DIRECTION_FORWARD ((uint32_t)0x00000001) /*!< Scan direction forward: from channel 0 to channel 18 */
jhon309 0:ac8863619623 299 #define ADC_SCAN_DIRECTION_BACKWARD ((uint32_t)0x00000002) /*!< Scan direction backward: from channel 18 to channel 0 */
jhon309 0:ac8863619623 300
jhon309 0:ac8863619623 301 #define ADC_SCAN_ENABLE ADC_SCAN_DIRECTION_FORWARD /* For compatibility with other STM32 devices */
jhon309 0:ac8863619623 302
jhon309 0:ac8863619623 303 #define IS_ADC_SCAN_MODE(SCAN_MODE) (((SCAN_MODE) == ADC_SCAN_DIRECTION_FORWARD) || \
jhon309 0:ac8863619623 304 ((SCAN_MODE) == ADC_SCAN_DIRECTION_BACKWARD) )
jhon309 0:ac8863619623 305 /**
jhon309 0:ac8863619623 306 * @}
jhon309 0:ac8863619623 307 */
jhon309 0:ac8863619623 308
jhon309 0:ac8863619623 309 /** @defgroup ADC_External_trigger_edge_Regular ADC External trigger edge Regular
jhon309 0:ac8863619623 310 * @{
jhon309 0:ac8863619623 311 */
jhon309 0:ac8863619623 312 #define ADC_EXTERNALTRIGCONVEDGE_NONE ((uint32_t)0x00000000)
jhon309 0:ac8863619623 313 #define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CFGR1_EXTEN_0)
jhon309 0:ac8863619623 314 #define ADC_EXTERNALTRIGCONVEDGE_FALLING ((uint32_t)ADC_CFGR1_EXTEN_1)
jhon309 0:ac8863619623 315 #define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING ((uint32_t)ADC_CFGR1_EXTEN)
jhon309 0:ac8863619623 316
jhon309 0:ac8863619623 317 #define IS_ADC_EXTTRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE) || \
jhon309 0:ac8863619623 318 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING) || \
jhon309 0:ac8863619623 319 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_FALLING) || \
jhon309 0:ac8863619623 320 ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING) )
jhon309 0:ac8863619623 321 /**
jhon309 0:ac8863619623 322 * @}
jhon309 0:ac8863619623 323 */
jhon309 0:ac8863619623 324
jhon309 0:ac8863619623 325 /** @defgroup ADC_External_trigger_source_Regular ADC External trigger source Regular
jhon309 0:ac8863619623 326 * @{
jhon309 0:ac8863619623 327 */
jhon309 0:ac8863619623 328 /* List of external triggers with generic trigger name, sorted by trigger */
jhon309 0:ac8863619623 329 /* name: */
jhon309 0:ac8863619623 330
jhon309 0:ac8863619623 331 /* External triggers of regular group for ADC1 */
jhon309 0:ac8863619623 332 #define ADC_EXTERNALTRIGCONV_T1_TRGO ADC1_2_EXTERNALTRIG_T1_TRGO
jhon309 0:ac8863619623 333 #define ADC_EXTERNALTRIGCONV_T1_CC4 ADC1_2_EXTERNALTRIG_T1_CC4
jhon309 0:ac8863619623 334 #define ADC_EXTERNALTRIGCONV_T2_TRGO ADC1_2_EXTERNALTRIG_T2_TRGO
jhon309 0:ac8863619623 335 #define ADC_EXTERNALTRIGCONV_T3_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO
jhon309 0:ac8863619623 336 #define ADC_EXTERNALTRIGCONV_T15_TRGO ADC1_2_EXTERNALTRIG_T15_TRGO
jhon309 0:ac8863619623 337 #define ADC_SOFTWARE_START ((uint32_t)0x00000010)
jhon309 0:ac8863619623 338
jhon309 0:ac8863619623 339 #define IS_ADC_EXTTRIG(REGTRIG) (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_TRGO) || \
jhon309 0:ac8863619623 340 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC4) || \
jhon309 0:ac8863619623 341 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_TRGO) || \
jhon309 0:ac8863619623 342 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) || \
jhon309 0:ac8863619623 343 ((REGTRIG) == ADC_EXTERNALTRIGCONV_T15_TRGO) || \
jhon309 0:ac8863619623 344 ((REGTRIG) == ADC_SOFTWARE_START) )
jhon309 0:ac8863619623 345 /**
jhon309 0:ac8863619623 346 * @}
jhon309 0:ac8863619623 347 */
jhon309 0:ac8863619623 348
jhon309 0:ac8863619623 349 /** @defgroup ADC_Internal_HAL_driver_Ext_trig_src_Regular ADC Internal HAL driver Ext trig src Regular
jhon309 0:ac8863619623 350 * @{
jhon309 0:ac8863619623 351 */
jhon309 0:ac8863619623 352
jhon309 0:ac8863619623 353 /* List of external triggers of regular group for ADC1: */
jhon309 0:ac8863619623 354 /* (used internally by HAL driver. To not use into HAL structure parameters) */
jhon309 0:ac8863619623 355 #define ADC1_2_EXTERNALTRIG_T1_TRGO ((uint32_t)0x00000000)
jhon309 0:ac8863619623 356 #define ADC1_2_EXTERNALTRIG_T1_CC4 ((uint32_t)ADC_CFGR1_EXTSEL_0)
jhon309 0:ac8863619623 357 #define ADC1_2_EXTERNALTRIG_T2_TRGO ((uint32_t)ADC_CFGR1_EXTSEL_1)
jhon309 0:ac8863619623 358 #define ADC1_2_EXTERNALTRIG_T3_TRGO ((uint32_t)(ADC_CFGR1_EXTSEL_1 | ADC_CFGR1_EXTSEL_0))
jhon309 0:ac8863619623 359 #define ADC1_2_EXTERNALTRIG_T15_TRGO ((uint32_t)ADC_CFGR1_EXTSEL_2)
jhon309 0:ac8863619623 360
jhon309 0:ac8863619623 361 /**
jhon309 0:ac8863619623 362 * @}
jhon309 0:ac8863619623 363 */
jhon309 0:ac8863619623 364
jhon309 0:ac8863619623 365 /** @defgroup ADC_EOCSelection ADC EOCSelection
jhon309 0:ac8863619623 366 * @{
jhon309 0:ac8863619623 367 */
jhon309 0:ac8863619623 368 #define EOC_SINGLE_CONV ((uint32_t) ADC_ISR_EOC)
jhon309 0:ac8863619623 369 #define EOC_SEQ_CONV ((uint32_t) ADC_ISR_EOS)
jhon309 0:ac8863619623 370 #define EOC_SINGLE_SEQ_CONV ((uint32_t)(ADC_ISR_EOC | ADC_ISR_EOS)) /*!< reserved for future use */
jhon309 0:ac8863619623 371
jhon309 0:ac8863619623 372 #define IS_ADC_EOC_SELECTION(EOC_SELECTION) (((EOC_SELECTION) == EOC_SINGLE_CONV) || \
jhon309 0:ac8863619623 373 ((EOC_SELECTION) == EOC_SEQ_CONV) || \
jhon309 0:ac8863619623 374 ((EOC_SELECTION) == EOC_SINGLE_SEQ_CONV) )
jhon309 0:ac8863619623 375 /**
jhon309 0:ac8863619623 376 * @}
jhon309 0:ac8863619623 377 */
jhon309 0:ac8863619623 378
jhon309 0:ac8863619623 379 /** @defgroup ADC_Overrun ADC Overrun
jhon309 0:ac8863619623 380 * @{
jhon309 0:ac8863619623 381 */
jhon309 0:ac8863619623 382 #define OVR_DATA_OVERWRITTEN ((uint32_t)0x00000000)
jhon309 0:ac8863619623 383 #define OVR_DATA_PRESERVED ((uint32_t)0x00000001)
jhon309 0:ac8863619623 384
jhon309 0:ac8863619623 385 #define IS_ADC_OVERRUN(OVR) (((OVR) == OVR_DATA_PRESERVED) || \
jhon309 0:ac8863619623 386 ((OVR) == OVR_DATA_OVERWRITTEN) )
jhon309 0:ac8863619623 387 /**
jhon309 0:ac8863619623 388 * @}
jhon309 0:ac8863619623 389 */
jhon309 0:ac8863619623 390
jhon309 0:ac8863619623 391 /** @defgroup ADC_channels ADC channels
jhon309 0:ac8863619623 392 * @{
jhon309 0:ac8863619623 393 */
jhon309 0:ac8863619623 394 /* Note: Depending on devices, some channels may not be available on package */
jhon309 0:ac8863619623 395 /* pins. Refer to device datasheet for channels availability. */
jhon309 0:ac8863619623 396 /* Note: Channels are used by bitfields for setting of channel selection */
jhon309 0:ac8863619623 397 /* (register ADC_CHSELR) and used by number for setting of analog watchdog */
jhon309 0:ac8863619623 398 /* channel (bits AWDCH in register ADC_CFGR1). */
jhon309 0:ac8863619623 399 /* Channels are defined with decimal numbers and converted them to bitfields */
jhon309 0:ac8863619623 400 /* when needed. */
jhon309 0:ac8863619623 401 #define ADC_CHANNEL_0 ((uint32_t) 0x00000000)
jhon309 0:ac8863619623 402 #define ADC_CHANNEL_1 ((uint32_t) 0x00000001)
jhon309 0:ac8863619623 403 #define ADC_CHANNEL_2 ((uint32_t) 0x00000002)
jhon309 0:ac8863619623 404 #define ADC_CHANNEL_3 ((uint32_t) 0x00000003)
jhon309 0:ac8863619623 405 #define ADC_CHANNEL_4 ((uint32_t) 0x00000004)
jhon309 0:ac8863619623 406 #define ADC_CHANNEL_5 ((uint32_t) 0x00000005)
jhon309 0:ac8863619623 407 #define ADC_CHANNEL_6 ((uint32_t) 0x00000006)
jhon309 0:ac8863619623 408 #define ADC_CHANNEL_7 ((uint32_t) 0x00000007)
jhon309 0:ac8863619623 409 #define ADC_CHANNEL_8 ((uint32_t) 0x00000008)
jhon309 0:ac8863619623 410 #define ADC_CHANNEL_9 ((uint32_t) 0x00000009)
jhon309 0:ac8863619623 411 #define ADC_CHANNEL_10 ((uint32_t) 0x0000000A)
jhon309 0:ac8863619623 412 #define ADC_CHANNEL_11 ((uint32_t) 0x0000000B)
jhon309 0:ac8863619623 413 #define ADC_CHANNEL_12 ((uint32_t) 0x0000000C)
jhon309 0:ac8863619623 414 #define ADC_CHANNEL_13 ((uint32_t) 0x0000000D)
jhon309 0:ac8863619623 415 #define ADC_CHANNEL_14 ((uint32_t) 0x0000000E)
jhon309 0:ac8863619623 416 #define ADC_CHANNEL_15 ((uint32_t) 0x0000000F)
jhon309 0:ac8863619623 417 #define ADC_CHANNEL_16 ((uint32_t) 0x00000010)
jhon309 0:ac8863619623 418 #define ADC_CHANNEL_17 ((uint32_t) 0x00000011)
jhon309 0:ac8863619623 419 #define ADC_CHANNEL_18 ((uint32_t) 0x00000012)
jhon309 0:ac8863619623 420
jhon309 0:ac8863619623 421 #define ADC_CHANNEL_TEMPSENSOR ADC_CHANNEL_16
jhon309 0:ac8863619623 422 #define ADC_CHANNEL_VREFINT ADC_CHANNEL_17
jhon309 0:ac8863619623 423 #define ADC_CHANNEL_VBAT ADC_CHANNEL_18
jhon309 0:ac8863619623 424
jhon309 0:ac8863619623 425 #define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) == ADC_CHANNEL_0) || \
jhon309 0:ac8863619623 426 ((CHANNEL) == ADC_CHANNEL_1) || \
jhon309 0:ac8863619623 427 ((CHANNEL) == ADC_CHANNEL_2) || \
jhon309 0:ac8863619623 428 ((CHANNEL) == ADC_CHANNEL_3) || \
jhon309 0:ac8863619623 429 ((CHANNEL) == ADC_CHANNEL_4) || \
jhon309 0:ac8863619623 430 ((CHANNEL) == ADC_CHANNEL_5) || \
jhon309 0:ac8863619623 431 ((CHANNEL) == ADC_CHANNEL_6) || \
jhon309 0:ac8863619623 432 ((CHANNEL) == ADC_CHANNEL_7) || \
jhon309 0:ac8863619623 433 ((CHANNEL) == ADC_CHANNEL_8) || \
jhon309 0:ac8863619623 434 ((CHANNEL) == ADC_CHANNEL_9) || \
jhon309 0:ac8863619623 435 ((CHANNEL) == ADC_CHANNEL_10) || \
jhon309 0:ac8863619623 436 ((CHANNEL) == ADC_CHANNEL_11) || \
jhon309 0:ac8863619623 437 ((CHANNEL) == ADC_CHANNEL_12) || \
jhon309 0:ac8863619623 438 ((CHANNEL) == ADC_CHANNEL_13) || \
jhon309 0:ac8863619623 439 ((CHANNEL) == ADC_CHANNEL_14) || \
jhon309 0:ac8863619623 440 ((CHANNEL) == ADC_CHANNEL_15) || \
jhon309 0:ac8863619623 441 ((CHANNEL) == ADC_CHANNEL_TEMPSENSOR) || \
jhon309 0:ac8863619623 442 ((CHANNEL) == ADC_CHANNEL_VREFINT) || \
jhon309 0:ac8863619623 443 ((CHANNEL) == ADC_CHANNEL_VBAT) )
jhon309 0:ac8863619623 444 /**
jhon309 0:ac8863619623 445 * @}
jhon309 0:ac8863619623 446 */
jhon309 0:ac8863619623 447
jhon309 0:ac8863619623 448 /** @defgroup ADC_rank ADC rank
jhon309 0:ac8863619623 449 * @{
jhon309 0:ac8863619623 450 */
jhon309 0:ac8863619623 451 #define ADC_RANK_CHANNEL_NUMBER ((uint32_t)0x00001000) /*!< Enable the rank of the selected channels. Rank is defined by each channel number (channel 0 fixed on rank 0, channel 1 fixed on rank1, ...) */
jhon309 0:ac8863619623 452 #define ADC_RANK_NONE ((uint32_t)0x00001001) /*!< Disable the selected rank (selected channel) from sequencer */
jhon309 0:ac8863619623 453
jhon309 0:ac8863619623 454 #define IS_ADC_RANK(WATCHDOG) (((WATCHDOG) == ADC_RANK_CHANNEL_NUMBER) || \
jhon309 0:ac8863619623 455 ((WATCHDOG) == ADC_RANK_NONE) )
jhon309 0:ac8863619623 456 /**
jhon309 0:ac8863619623 457 * @}
jhon309 0:ac8863619623 458 */
jhon309 0:ac8863619623 459
jhon309 0:ac8863619623 460 /** @defgroup ADC_sampling_times ADC sampling times
jhon309 0:ac8863619623 461 * @{
jhon309 0:ac8863619623 462 */
jhon309 0:ac8863619623 463 #define ADC_SAMPLETIME_1CYCLE_5 ((uint32_t)0x00000000) /*!< Sampling time 1.5 ADC clock cycle */
jhon309 0:ac8863619623 464 #define ADC_SAMPLETIME_7CYCLES_5 ((uint32_t) ADC_SMPR_SMP_0) /*!< Sampling time 7.5 ADC clock cycles */
jhon309 0:ac8863619623 465 #define ADC_SAMPLETIME_13CYCLES_5 ((uint32_t) ADC_SMPR_SMP_1) /*!< Sampling time 13.5 ADC clock cycles */
jhon309 0:ac8863619623 466 #define ADC_SAMPLETIME_28CYCLES_5 ((uint32_t)(ADC_SMPR_SMP_1 | ADC_SMPR_SMP_0)) /*!< Sampling time 28.5 ADC clock cycles */
jhon309 0:ac8863619623 467 #define ADC_SAMPLETIME_41CYCLES_5 ((uint32_t) ADC_SMPR_SMP_2) /*!< Sampling time 41.5 ADC clock cycles */
jhon309 0:ac8863619623 468 #define ADC_SAMPLETIME_55CYCLES_5 ((uint32_t)(ADC_SMPR_SMP_2 | ADC_SMPR_SMP_0)) /*!< Sampling time 55.5 ADC clock cycles */
jhon309 0:ac8863619623 469 #define ADC_SAMPLETIME_71CYCLES_5 ((uint32_t)(ADC_SMPR_SMP_2 | ADC_SMPR_SMP_1)) /*!< Sampling time 71.5 ADC clock cycles */
jhon309 0:ac8863619623 470 #define ADC_SAMPLETIME_239CYCLES_5 ((uint32_t) ADC_SMPR_SMP) /*!< Sampling time 239.5 ADC clock cycles */
jhon309 0:ac8863619623 471
jhon309 0:ac8863619623 472 #define IS_ADC_SAMPLE_TIME(TIME) (((TIME) == ADC_SAMPLETIME_1CYCLE_5) || \
jhon309 0:ac8863619623 473 ((TIME) == ADC_SAMPLETIME_7CYCLES_5) || \
jhon309 0:ac8863619623 474 ((TIME) == ADC_SAMPLETIME_13CYCLES_5) || \
jhon309 0:ac8863619623 475 ((TIME) == ADC_SAMPLETIME_28CYCLES_5) || \
jhon309 0:ac8863619623 476 ((TIME) == ADC_SAMPLETIME_41CYCLES_5) || \
jhon309 0:ac8863619623 477 ((TIME) == ADC_SAMPLETIME_55CYCLES_5) || \
jhon309 0:ac8863619623 478 ((TIME) == ADC_SAMPLETIME_71CYCLES_5) || \
jhon309 0:ac8863619623 479 ((TIME) == ADC_SAMPLETIME_239CYCLES_5) )
jhon309 0:ac8863619623 480 /**
jhon309 0:ac8863619623 481 * @}
jhon309 0:ac8863619623 482 */
jhon309 0:ac8863619623 483
jhon309 0:ac8863619623 484 /** @defgroup ADC_analog_watchdog_mode ADC analog watchdog mode
jhon309 0:ac8863619623 485 * @{
jhon309 0:ac8863619623 486 */
jhon309 0:ac8863619623 487 #define ADC_ANALOGWATCHDOG_NONE ((uint32_t) 0x00000000)
jhon309 0:ac8863619623 488 #define ADC_ANALOGWATCHDOG_SINGLE_REG ((uint32_t)(ADC_CFGR1_AWDSGL | ADC_CFGR1_AWDEN))
jhon309 0:ac8863619623 489 #define ADC_ANALOGWATCHDOG_ALL_REG ((uint32_t) ADC_CFGR1_AWDEN)
jhon309 0:ac8863619623 490
jhon309 0:ac8863619623 491
jhon309 0:ac8863619623 492 #define IS_ADC_ANALOG_WATCHDOG_MODE(WATCHDOG) (((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE) || \
jhon309 0:ac8863619623 493 ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG) || \
jhon309 0:ac8863619623 494 ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG) )
jhon309 0:ac8863619623 495 /**
jhon309 0:ac8863619623 496 * @}
jhon309 0:ac8863619623 497 */
jhon309 0:ac8863619623 498
jhon309 0:ac8863619623 499 /** @defgroup ADC_Event_type ADC Event type
jhon309 0:ac8863619623 500 * @{
jhon309 0:ac8863619623 501 */
jhon309 0:ac8863619623 502 #define AWD_EVENT ((uint32_t)ADC_FLAG_AWD) /*!< ADC Analog watchdog 1 event */
jhon309 0:ac8863619623 503 #define OVR_EVENT ((uint32_t)ADC_FLAG_OVR) /*!< ADC overrun event */
jhon309 0:ac8863619623 504
jhon309 0:ac8863619623 505 #define IS_ADC_EVENT_TYPE(EVENT) (((EVENT) == AWD_EVENT) || \
jhon309 0:ac8863619623 506 ((EVENT) == OVR_EVENT) )
jhon309 0:ac8863619623 507 /**
jhon309 0:ac8863619623 508 * @}
jhon309 0:ac8863619623 509 */
jhon309 0:ac8863619623 510
jhon309 0:ac8863619623 511 /** @defgroup ADC_interrupts_definition ADC interrupts definition
jhon309 0:ac8863619623 512 * @{
jhon309 0:ac8863619623 513 */
jhon309 0:ac8863619623 514 #define ADC_IT_AWD ADC_IER_AWDIE /*!< ADC Analog watchdog interrupt source */
jhon309 0:ac8863619623 515 #define ADC_IT_OVR ADC_IER_OVRIE /*!< ADC overrun interrupt source */
jhon309 0:ac8863619623 516 #define ADC_IT_EOS ADC_IER_EOSEQIE /*!< ADC End of Regular sequence of Conversions interrupt source */
jhon309 0:ac8863619623 517 #define ADC_IT_EOC ADC_IER_EOCIE /*!< ADC End of Regular Conversion interrupt source */
jhon309 0:ac8863619623 518 #define ADC_IT_EOSMP ADC_IER_EOSMPIE /*!< ADC End of Sampling interrupt source */
jhon309 0:ac8863619623 519 #define ADC_IT_RDY ADC_IER_ADRDYIE /*!< ADC Ready interrupt source */
jhon309 0:ac8863619623 520 /**
jhon309 0:ac8863619623 521 * @}
jhon309 0:ac8863619623 522 */
jhon309 0:ac8863619623 523
jhon309 0:ac8863619623 524 /** @defgroup ADC_flags_definition ADC flags definition
jhon309 0:ac8863619623 525 * @{
jhon309 0:ac8863619623 526 */
jhon309 0:ac8863619623 527 #define ADC_FLAG_AWD ADC_ISR_AWD /*!< ADC Analog watchdog flag */
jhon309 0:ac8863619623 528 #define ADC_FLAG_OVR ADC_ISR_OVR /*!< ADC overrun flag */
jhon309 0:ac8863619623 529 #define ADC_FLAG_EOS ADC_ISR_EOSEQ /*!< ADC End of Regular sequence of Conversions flag */
jhon309 0:ac8863619623 530 #define ADC_FLAG_EOC ADC_ISR_EOC /*!< ADC End of Regular Conversion flag */
jhon309 0:ac8863619623 531 #define ADC_FLAG_EOSMP ADC_ISR_EOSMP /*!< ADC End of Sampling flag */
jhon309 0:ac8863619623 532 #define ADC_FLAG_RDY ADC_ISR_ADRDY /*!< ADC Ready flag */
jhon309 0:ac8863619623 533
jhon309 0:ac8863619623 534 #define ADC_FLAG_ALL (ADC_FLAG_AWD | ADC_FLAG_OVR | ADC_FLAG_EOS | ADC_FLAG_EOC | \
jhon309 0:ac8863619623 535 ADC_FLAG_EOSMP | ADC_FLAG_RDY )
jhon309 0:ac8863619623 536
jhon309 0:ac8863619623 537 /* Combination of all post-conversion flags bits: EOC/EOS, OVR, AWD */
jhon309 0:ac8863619623 538 #define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_AWD | ADC_FLAG_OVR | ADC_FLAG_EOS | ADC_FLAG_EOC)
jhon309 0:ac8863619623 539 /**
jhon309 0:ac8863619623 540 * @}
jhon309 0:ac8863619623 541 */
jhon309 0:ac8863619623 542
jhon309 0:ac8863619623 543 /** @defgroup ADC_range_verification ADC range verification
jhon309 0:ac8863619623 544 * in function of ADC resolution selected (12, 10, 8 or 6 bits)
jhon309 0:ac8863619623 545 * @{
jhon309 0:ac8863619623 546 */
jhon309 0:ac8863619623 547 #define IS_ADC_RANGE(RESOLUTION, ADC_VALUE) \
jhon309 0:ac8863619623 548 ((((RESOLUTION) == ADC_RESOLUTION12b) && ((ADC_VALUE) <= ((uint32_t)0x0FFF))) || \
jhon309 0:ac8863619623 549 (((RESOLUTION) == ADC_RESOLUTION10b) && ((ADC_VALUE) <= ((uint32_t)0x03FF))) || \
jhon309 0:ac8863619623 550 (((RESOLUTION) == ADC_RESOLUTION8b) && ((ADC_VALUE) <= ((uint32_t)0x00FF))) || \
jhon309 0:ac8863619623 551 (((RESOLUTION) == ADC_RESOLUTION6b) && ((ADC_VALUE) <= ((uint32_t)0x003F))) )
jhon309 0:ac8863619623 552 /**
jhon309 0:ac8863619623 553 * @}
jhon309 0:ac8863619623 554 */
jhon309 0:ac8863619623 555
jhon309 0:ac8863619623 556 /** @defgroup ADC_regular_rank_verification ADC regular rank verification
jhon309 0:ac8863619623 557 * @{
jhon309 0:ac8863619623 558 */
jhon309 0:ac8863619623 559 #define IS_ADC_REGULAR_RANK(RANK) (((RANK) >= ((uint32_t)1)) && ((RANK) <= ((uint32_t)16)))
jhon309 0:ac8863619623 560 /**
jhon309 0:ac8863619623 561 * @}
jhon309 0:ac8863619623 562 */
jhon309 0:ac8863619623 563
jhon309 0:ac8863619623 564 /**
jhon309 0:ac8863619623 565 * @}
jhon309 0:ac8863619623 566 */
jhon309 0:ac8863619623 567
jhon309 0:ac8863619623 568 /* Exported macros -----------------------------------------------------------*/
jhon309 0:ac8863619623 569
jhon309 0:ac8863619623 570 /** @defgroup ADC_Exported_Macros ADC Exported Macros
jhon309 0:ac8863619623 571 * @{
jhon309 0:ac8863619623 572 */
jhon309 0:ac8863619623 573 /** @brief Reset ADC handle state
jhon309 0:ac8863619623 574 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 575 * @retval None
jhon309 0:ac8863619623 576 */
jhon309 0:ac8863619623 577 #define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET)
jhon309 0:ac8863619623 578
jhon309 0:ac8863619623 579 /* Macro for internal HAL driver usage, and possibly can be used into code of */
jhon309 0:ac8863619623 580 /* final user. */
jhon309 0:ac8863619623 581
jhon309 0:ac8863619623 582 /**
jhon309 0:ac8863619623 583 * @brief Verification of ADC state: enabled or disabled
jhon309 0:ac8863619623 584 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 585 * @retval SET (ADC enabled) or RESET (ADC disabled)
jhon309 0:ac8863619623 586 */
jhon309 0:ac8863619623 587 /* Note: If low power mode AutoPowerOff is enabled, power-on/off phases are */
jhon309 0:ac8863619623 588 /* performed automatically by hardware and flag ADC_FLAG_RDY is not */
jhon309 0:ac8863619623 589 /* set. */
jhon309 0:ac8863619623 590 #define __HAL_ADC_IS_ENABLED(__HANDLE__) \
jhon309 0:ac8863619623 591 (( ((((__HANDLE__)->Instance->CR) & (ADC_CR_ADEN | ADC_CR_ADDIS)) == ADC_CR_ADEN) && \
jhon309 0:ac8863619623 592 (((((__HANDLE__)->Instance->ISR) & ADC_FLAG_RDY) == ADC_FLAG_RDY) || \
jhon309 0:ac8863619623 593 ((((__HANDLE__)->Instance->CFGR1) & ADC_CFGR1_AUTOFF) == ADC_CFGR1_AUTOFF) ) \
jhon309 0:ac8863619623 594 ) ? SET : RESET)
jhon309 0:ac8863619623 595
jhon309 0:ac8863619623 596 /**
jhon309 0:ac8863619623 597 * @brief Test if conversion trigger of regular group is software start
jhon309 0:ac8863619623 598 * or external trigger.
jhon309 0:ac8863619623 599 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 600 * @retval SET (software start) or RESET (external trigger)
jhon309 0:ac8863619623 601 */
jhon309 0:ac8863619623 602 #define __HAL_ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) \
jhon309 0:ac8863619623 603 (((__HANDLE__)->Instance->CFGR1 & ADC_CFGR1_EXTEN) == RESET)
jhon309 0:ac8863619623 604
jhon309 0:ac8863619623 605 /**
jhon309 0:ac8863619623 606 * @brief Check if no conversion on going on regular group
jhon309 0:ac8863619623 607 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 608 * @retval SET (conversion is on going) or RESET (no conversion is on going)
jhon309 0:ac8863619623 609 */
jhon309 0:ac8863619623 610 #define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(__HANDLE__) \
jhon309 0:ac8863619623 611 (( (((__HANDLE__)->Instance->CR) & ADC_CR_ADSTART) == RESET \
jhon309 0:ac8863619623 612 ) ? RESET : SET)
jhon309 0:ac8863619623 613
jhon309 0:ac8863619623 614 /**
jhon309 0:ac8863619623 615 * @brief Returns resolution bits in CFGR1 register: RES[1:0].
jhon309 0:ac8863619623 616 * Returned value is among parameters to @ref ADC_Resolution.
jhon309 0:ac8863619623 617 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 618 * @retval None
jhon309 0:ac8863619623 619 */
jhon309 0:ac8863619623 620 #define __HAL_ADC_GET_RESOLUTION(__HANDLE__) (((__HANDLE__)->Instance->CFGR1) & ADC_CFGR1_RES)
jhon309 0:ac8863619623 621
jhon309 0:ac8863619623 622 /**
jhon309 0:ac8863619623 623 * @brief Returns ADC sample time bits in SMPR register: SMP[2:0].
jhon309 0:ac8863619623 624 * Returned value is among parameters to @ref ADC_Resolution.
jhon309 0:ac8863619623 625 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 626 * @retval None
jhon309 0:ac8863619623 627 */
jhon309 0:ac8863619623 628 #define __HAL_ADC_GET_SAMPLINGTIME(__HANDLE__) (((__HANDLE__)->Instance->SMPR) & ADC_SMPR_SMP)
jhon309 0:ac8863619623 629
jhon309 0:ac8863619623 630 /** @brief Checks if the specified ADC interrupt source is enabled or disabled.
jhon309 0:ac8863619623 631 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 632 * @param __INTERRUPT__: ADC interrupt source to check
jhon309 0:ac8863619623 633 * @retval State ofinterruption (SET or RESET)
jhon309 0:ac8863619623 634 */
jhon309 0:ac8863619623 635 #define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
jhon309 0:ac8863619623 636 (( ((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__) \
jhon309 0:ac8863619623 637 )? SET : RESET \
jhon309 0:ac8863619623 638 )
jhon309 0:ac8863619623 639
jhon309 0:ac8863619623 640 /**
jhon309 0:ac8863619623 641 * @brief Enable the ADC end of conversion interrupt.
jhon309 0:ac8863619623 642 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 643 * @param __INTERRUPT__: ADC Interrupt
jhon309 0:ac8863619623 644 * @retval None
jhon309 0:ac8863619623 645 */
jhon309 0:ac8863619623 646 #define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__))
jhon309 0:ac8863619623 647
jhon309 0:ac8863619623 648 /**
jhon309 0:ac8863619623 649 * @brief Disable the ADC end of conversion interrupt.
jhon309 0:ac8863619623 650 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 651 * @param __INTERRUPT__: ADC Interrupt
jhon309 0:ac8863619623 652 * @retval None
jhon309 0:ac8863619623 653 */
jhon309 0:ac8863619623 654 #define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__))
jhon309 0:ac8863619623 655
jhon309 0:ac8863619623 656 /**
jhon309 0:ac8863619623 657 * @brief Get the selected ADC's flag status.
jhon309 0:ac8863619623 658 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 659 * @param __FLAG__: ADC flag
jhon309 0:ac8863619623 660 * @retval None
jhon309 0:ac8863619623 661 */
jhon309 0:ac8863619623 662 #define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->ISR) & (__FLAG__)) == (__FLAG__))
jhon309 0:ac8863619623 663
jhon309 0:ac8863619623 664 /**
jhon309 0:ac8863619623 665 * @brief Clear the ADC's pending flags
jhon309 0:ac8863619623 666 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 667 * @param __FLAG__: ADC flag
jhon309 0:ac8863619623 668 * @retval None
jhon309 0:ac8863619623 669 */
jhon309 0:ac8863619623 670 /* Note: bit cleared bit by writing 1 (writing 0 has no effect on any bit of register ISR) */
jhon309 0:ac8863619623 671 #define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR) = (__FLAG__))
jhon309 0:ac8863619623 672
jhon309 0:ac8863619623 673 /**
jhon309 0:ac8863619623 674 * @brief Clear ADC error code (set it to error code: "no error")
jhon309 0:ac8863619623 675 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 676 * @retval None
jhon309 0:ac8863619623 677 */
jhon309 0:ac8863619623 678 #define __HAL_ADC_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)
jhon309 0:ac8863619623 679
jhon309 0:ac8863619623 680
jhon309 0:ac8863619623 681 /**
jhon309 0:ac8863619623 682 * @brief Configure the channel number into channel selection register
jhon309 0:ac8863619623 683 * @param _CHANNEL_: ADC Channel
jhon309 0:ac8863619623 684 * @retval None
jhon309 0:ac8863619623 685 */
jhon309 0:ac8863619623 686 /* This function converts ADC channels from numbers (see defgroup ADC_channels)
jhon309 0:ac8863619623 687 to bitfields, to get the equivalence of CMSIS channels:
jhon309 0:ac8863619623 688 ADC_CHANNEL_0 ((uint32_t) ADC_CHSELR_CHSEL0)
jhon309 0:ac8863619623 689 ADC_CHANNEL_1 ((uint32_t) ADC_CHSELR_CHSEL1)
jhon309 0:ac8863619623 690 ADC_CHANNEL_2 ((uint32_t) ADC_CHSELR_CHSEL2)
jhon309 0:ac8863619623 691 ADC_CHANNEL_3 ((uint32_t) ADC_CHSELR_CHSEL3)
jhon309 0:ac8863619623 692 ADC_CHANNEL_4 ((uint32_t) ADC_CHSELR_CHSEL4)
jhon309 0:ac8863619623 693 ADC_CHANNEL_5 ((uint32_t) ADC_CHSELR_CHSEL5)
jhon309 0:ac8863619623 694 ADC_CHANNEL_6 ((uint32_t) ADC_CHSELR_CHSEL6)
jhon309 0:ac8863619623 695 ADC_CHANNEL_7 ((uint32_t) ADC_CHSELR_CHSEL7)
jhon309 0:ac8863619623 696 ADC_CHANNEL_8 ((uint32_t) ADC_CHSELR_CHSEL8)
jhon309 0:ac8863619623 697 ADC_CHANNEL_9 ((uint32_t) ADC_CHSELR_CHSEL9)
jhon309 0:ac8863619623 698 ADC_CHANNEL_10 ((uint32_t) ADC_CHSELR_CHSEL10)
jhon309 0:ac8863619623 699 ADC_CHANNEL_11 ((uint32_t) ADC_CHSELR_CHSEL11)
jhon309 0:ac8863619623 700 ADC_CHANNEL_12 ((uint32_t) ADC_CHSELR_CHSEL12)
jhon309 0:ac8863619623 701 ADC_CHANNEL_13 ((uint32_t) ADC_CHSELR_CHSEL13)
jhon309 0:ac8863619623 702 ADC_CHANNEL_14 ((uint32_t) ADC_CHSELR_CHSEL14)
jhon309 0:ac8863619623 703 ADC_CHANNEL_15 ((uint32_t) ADC_CHSELR_CHSEL15)
jhon309 0:ac8863619623 704 ADC_CHANNEL_16 ((uint32_t) ADC_CHSELR_CHSEL16)
jhon309 0:ac8863619623 705 ADC_CHANNEL_17 ((uint32_t) ADC_CHSELR_CHSEL17)
jhon309 0:ac8863619623 706 ADC_CHANNEL_18 ((uint32_t) ADC_CHSELR_CHSEL18)
jhon309 0:ac8863619623 707 */
jhon309 0:ac8863619623 708 #define __HAL_ADC_CHSELR_CHANNEL(_CHANNEL_) ( 1U << (_CHANNEL_))
jhon309 0:ac8863619623 709
jhon309 0:ac8863619623 710 /**
jhon309 0:ac8863619623 711 * @}
jhon309 0:ac8863619623 712 */
jhon309 0:ac8863619623 713
jhon309 0:ac8863619623 714 /** @defgroup ADC_Exported_Macro_internal_HAL_driver ADC Exported Macro internal HAL driver
jhon309 0:ac8863619623 715 * @{
jhon309 0:ac8863619623 716 */
jhon309 0:ac8863619623 717 /* Macro reserved for internal HAL driver usage, not intended to be used in */
jhon309 0:ac8863619623 718 /* code of final user. */
jhon309 0:ac8863619623 719
jhon309 0:ac8863619623 720 /**
jhon309 0:ac8863619623 721 * @brief Set the Analog Watchdog 1 channel.
jhon309 0:ac8863619623 722 * @param _CHANNEL_: channel to be monitored by Analog Watchdog 1.
jhon309 0:ac8863619623 723 * @retval None
jhon309 0:ac8863619623 724 */
jhon309 0:ac8863619623 725 #define __HAL_ADC_CFGR_AWDCH(_CHANNEL_) ((_CHANNEL_) << 26)
jhon309 0:ac8863619623 726
jhon309 0:ac8863619623 727 /**
jhon309 0:ac8863619623 728 * @brief Enable ADC discontinuous conversion mode for regular group
jhon309 0:ac8863619623 729 * @param _REG_DISCONTINUOUS_MODE_: Regular discontinuous mode.
jhon309 0:ac8863619623 730 * @retval None
jhon309 0:ac8863619623 731 */
jhon309 0:ac8863619623 732 #define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS(_REG_DISCONTINUOUS_MODE_) ((_REG_DISCONTINUOUS_MODE_) << 16)
jhon309 0:ac8863619623 733
jhon309 0:ac8863619623 734 /**
jhon309 0:ac8863619623 735 * @brief Enable the ADC auto off mode.
jhon309 0:ac8863619623 736 * @param _AUTOOFF_: Auto off bit enable or disable.
jhon309 0:ac8863619623 737 * @retval None
jhon309 0:ac8863619623 738 */
jhon309 0:ac8863619623 739 #define __HAL_ADC_CFGR1_AUTOOFF(_AUTOOFF_) ((_AUTOOFF_) << 15)
jhon309 0:ac8863619623 740
jhon309 0:ac8863619623 741 /**
jhon309 0:ac8863619623 742 * @brief Enable the ADC auto delay mode.
jhon309 0:ac8863619623 743 * @param _AUTOWAIT_: Auto delay bit enable or disable.
jhon309 0:ac8863619623 744 * @retval None
jhon309 0:ac8863619623 745 */
jhon309 0:ac8863619623 746 #define __HAL_ADC_CFGR1_AUTOWAIT(_AUTOWAIT_) ((_AUTOWAIT_) << 14)
jhon309 0:ac8863619623 747
jhon309 0:ac8863619623 748 /**
jhon309 0:ac8863619623 749 * @brief Enable ADC continuous conversion mode.
jhon309 0:ac8863619623 750 * @param _CONTINUOUS_MODE_: Continuous mode.
jhon309 0:ac8863619623 751 * @retval None
jhon309 0:ac8863619623 752 */
jhon309 0:ac8863619623 753 #define __HAL_ADC_CFGR1_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << 13)
jhon309 0:ac8863619623 754
jhon309 0:ac8863619623 755 /**
jhon309 0:ac8863619623 756 * @brief Enable ADC overrun mode.
jhon309 0:ac8863619623 757 * @param _OVERRUN_MODE_: Overrun mode.
jhon309 0:ac8863619623 758 * @retval Overun bit setting to be programmed into CFGR register
jhon309 0:ac8863619623 759 */
jhon309 0:ac8863619623 760 /* Note: Bit ADC_CFGR1_OVRMOD not used directly in constant */
jhon309 0:ac8863619623 761 /* "OVR_DATA_OVERWRITTEN" to have this case defined to 0x00, to set it as the */
jhon309 0:ac8863619623 762 /* default case to be compliant with other STM32 devices. */
jhon309 0:ac8863619623 763 #define __HAL_ADC_CFGR1_OVERRUN(_OVERRUN_MODE_) \
jhon309 0:ac8863619623 764 ( ( (_OVERRUN_MODE_) != (OVR_DATA_PRESERVED) \
jhon309 0:ac8863619623 765 )? (ADC_CFGR1_OVRMOD) : (0x00000000) \
jhon309 0:ac8863619623 766 )
jhon309 0:ac8863619623 767
jhon309 0:ac8863619623 768 /**
jhon309 0:ac8863619623 769 * @brief Enable ADC scan mode to convert multiple ranks with sequencer.
jhon309 0:ac8863619623 770 * @param _SCAN_MODE_: Scan conversion mode.
jhon309 0:ac8863619623 771 * @retval None
jhon309 0:ac8863619623 772 */
jhon309 0:ac8863619623 773 #define __HAL_ADC_CFGR1_SCANDIR(_SCAN_MODE_) \
jhon309 0:ac8863619623 774 ( ( (_SCAN_MODE_) == (ADC_SCAN_DIRECTION_BACKWARD) \
jhon309 0:ac8863619623 775 )? (ADC_CFGR1_SCANDIR) : (0x00000000) \
jhon309 0:ac8863619623 776 )
jhon309 0:ac8863619623 777
jhon309 0:ac8863619623 778 /**
jhon309 0:ac8863619623 779 * @brief Enable the ADC DMA continuous request.
jhon309 0:ac8863619623 780 * @param _DMACONTREQ_MODE_: DMA continuous request mode.
jhon309 0:ac8863619623 781 * @retval None
jhon309 0:ac8863619623 782 */
jhon309 0:ac8863619623 783 #define __HAL_ADC_CFGR1_DMACONTREQ(_DMACONTREQ_MODE_) ((_DMACONTREQ_MODE_) << 1)
jhon309 0:ac8863619623 784
jhon309 0:ac8863619623 785 /**
jhon309 0:ac8863619623 786 * @brief Configure the analog watchdog high threshold into register TR.
jhon309 0:ac8863619623 787 * @param _Threshold_: Threshold value
jhon309 0:ac8863619623 788 * @retval None
jhon309 0:ac8863619623 789 */
jhon309 0:ac8863619623 790 #define __HAL_ADC_TRX_HIGHTHRESHOLD(_Threshold_) ((_Threshold_) << 16)
jhon309 0:ac8863619623 791
jhon309 0:ac8863619623 792 /**
jhon309 0:ac8863619623 793 * @brief Enable the ADC peripheral
jhon309 0:ac8863619623 794 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 795 * @retval None
jhon309 0:ac8863619623 796 */
jhon309 0:ac8863619623 797 #define __HAL_ADC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= ADC_CR_ADEN)
jhon309 0:ac8863619623 798
jhon309 0:ac8863619623 799 /**
jhon309 0:ac8863619623 800 * @brief Verification of hardware constraints before ADC can be enabled
jhon309 0:ac8863619623 801 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 802 * @retval SET (ADC can be enabled) or RESET (ADC cannot be enabled)
jhon309 0:ac8863619623 803 */
jhon309 0:ac8863619623 804 #define __HAL_ADC_ENABLING_CONDITIONS(__HANDLE__) \
jhon309 0:ac8863619623 805 (( ( ((__HANDLE__)->Instance->CR) & \
jhon309 0:ac8863619623 806 (ADC_CR_ADCAL | ADC_CR_ADSTP | \
jhon309 0:ac8863619623 807 ADC_CR_ADSTART | ADC_CR_ADDIS | ADC_CR_ADEN ) \
jhon309 0:ac8863619623 808 ) == RESET \
jhon309 0:ac8863619623 809 ) ? SET : RESET)
jhon309 0:ac8863619623 810
jhon309 0:ac8863619623 811 /**
jhon309 0:ac8863619623 812 * @brief Disable the ADC peripheral
jhon309 0:ac8863619623 813 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 814 * @retval None
jhon309 0:ac8863619623 815 */
jhon309 0:ac8863619623 816 #define __HAL_ADC_DISABLE(__HANDLE__) \
jhon309 0:ac8863619623 817 do{ \
jhon309 0:ac8863619623 818 (__HANDLE__)->Instance->CR |= ADC_CR_ADDIS; \
jhon309 0:ac8863619623 819 __HAL_ADC_CLEAR_FLAG((__HANDLE__), (ADC_FLAG_EOSMP | ADC_FLAG_RDY)); \
jhon309 0:ac8863619623 820 } while(0)
jhon309 0:ac8863619623 821
jhon309 0:ac8863619623 822 /**
jhon309 0:ac8863619623 823 * @brief Verification of hardware constraints before ADC can be disabled
jhon309 0:ac8863619623 824 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 825 * @retval SET (ADC can be disabled) or RESET (ADC cannot be disabled)
jhon309 0:ac8863619623 826 */
jhon309 0:ac8863619623 827 #define __HAL_ADC_DISABLING_CONDITIONS(__HANDLE__) \
jhon309 0:ac8863619623 828 (( ( ((__HANDLE__)->Instance->CR) & \
jhon309 0:ac8863619623 829 (ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN \
jhon309 0:ac8863619623 830 ) ? SET : RESET)
jhon309 0:ac8863619623 831
jhon309 0:ac8863619623 832 /**
jhon309 0:ac8863619623 833 * @brief Shift the AWD threshold in function of the selected ADC resolution.
jhon309 0:ac8863619623 834 * Thresholds have to be left-aligned on bit 11, the LSB (right bits) are set to 0.
jhon309 0:ac8863619623 835 * If resolution 12 bits, no shift.
jhon309 0:ac8863619623 836 * If resolution 10 bits, shift of 2 ranks on the left.
jhon309 0:ac8863619623 837 * If resolution 8 bits, shift of 4 ranks on the left.
jhon309 0:ac8863619623 838 * If resolution 6 bits, shift of 6 ranks on the left.
jhon309 0:ac8863619623 839 * therefore, shift = (12 - resolution) = 12 - (12- (((RES[1:0]) >> 3)*2))
jhon309 0:ac8863619623 840 * @param __HANDLE__: ADC handle
jhon309 0:ac8863619623 841 * @param _Threshold_: Value to be shifted
jhon309 0:ac8863619623 842 * @retval None
jhon309 0:ac8863619623 843 */
jhon309 0:ac8863619623 844 #define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(__HANDLE__, _Threshold_) \
jhon309 0:ac8863619623 845 ((_Threshold_) << ((((__HANDLE__)->Instance->CFGR1 & ADC_CFGR1_RES) >> 3)*2))
jhon309 0:ac8863619623 846
jhon309 0:ac8863619623 847 /**
jhon309 0:ac8863619623 848 * @}
jhon309 0:ac8863619623 849 */
jhon309 0:ac8863619623 850
jhon309 0:ac8863619623 851 /* Include ADC HAL Extension module */
jhon309 0:ac8863619623 852 #include "stm32f0xx_hal_adc_ex.h"
jhon309 0:ac8863619623 853
jhon309 0:ac8863619623 854 /* Exported functions --------------------------------------------------------*/
jhon309 0:ac8863619623 855 /** @addtogroup ADC_Exported_Functions
jhon309 0:ac8863619623 856 * @{
jhon309 0:ac8863619623 857 */
jhon309 0:ac8863619623 858
jhon309 0:ac8863619623 859 /** @addtogroup ADC_Exported_Functions_Group1
jhon309 0:ac8863619623 860 * @{
jhon309 0:ac8863619623 861 */
jhon309 0:ac8863619623 862
jhon309 0:ac8863619623 863
jhon309 0:ac8863619623 864 /* Initialization and de-initialization functions **********************************/
jhon309 0:ac8863619623 865 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 866 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);
jhon309 0:ac8863619623 867 void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 868 void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 869 /**
jhon309 0:ac8863619623 870 * @}
jhon309 0:ac8863619623 871 */
jhon309 0:ac8863619623 872
jhon309 0:ac8863619623 873 /* IO operation functions *****************************************************/
jhon309 0:ac8863619623 874
jhon309 0:ac8863619623 875 /** @addtogroup ADC_Exported_Functions_Group2
jhon309 0:ac8863619623 876 * @{
jhon309 0:ac8863619623 877 */
jhon309 0:ac8863619623 878
jhon309 0:ac8863619623 879
jhon309 0:ac8863619623 880 /* Blocking mode: Polling */
jhon309 0:ac8863619623 881 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 882 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 883 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
jhon309 0:ac8863619623 884 HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout);
jhon309 0:ac8863619623 885
jhon309 0:ac8863619623 886 /* Non-blocking mode: Interruption */
jhon309 0:ac8863619623 887 HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 888 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 889
jhon309 0:ac8863619623 890 /* Non-blocking mode: DMA */
jhon309 0:ac8863619623 891 HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);
jhon309 0:ac8863619623 892 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 893
jhon309 0:ac8863619623 894 /* ADC retrieve conversion value intended to be used with polling or interruption */
jhon309 0:ac8863619623 895 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 896
jhon309 0:ac8863619623 897 /* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption and DMA) */
jhon309 0:ac8863619623 898 void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 899 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 900 void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 901 void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 902 void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);
jhon309 0:ac8863619623 903 /**
jhon309 0:ac8863619623 904 * @}
jhon309 0:ac8863619623 905 */
jhon309 0:ac8863619623 906
jhon309 0:ac8863619623 907
jhon309 0:ac8863619623 908 /* Peripheral Control functions ***********************************************/
jhon309 0:ac8863619623 909 /** @addtogroup ADC_Exported_Functions_Group3
jhon309 0:ac8863619623 910 * @{
jhon309 0:ac8863619623 911 */
jhon309 0:ac8863619623 912 HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig);
jhon309 0:ac8863619623 913 HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig);
jhon309 0:ac8863619623 914 /**
jhon309 0:ac8863619623 915 * @}
jhon309 0:ac8863619623 916 */
jhon309 0:ac8863619623 917
jhon309 0:ac8863619623 918
jhon309 0:ac8863619623 919 /* Peripheral State functions *************************************************/
jhon309 0:ac8863619623 920 /** @addtogroup ADC_Exported_Functions_Group4
jhon309 0:ac8863619623 921 * @{
jhon309 0:ac8863619623 922 */
jhon309 0:ac8863619623 923 HAL_ADC_StateTypeDef HAL_ADC_GetState(ADC_HandleTypeDef* hadc);
jhon309 0:ac8863619623 924 uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);
jhon309 0:ac8863619623 925 /**
jhon309 0:ac8863619623 926 * @}
jhon309 0:ac8863619623 927 */
jhon309 0:ac8863619623 928
jhon309 0:ac8863619623 929
jhon309 0:ac8863619623 930 /**
jhon309 0:ac8863619623 931 * @}
jhon309 0:ac8863619623 932 */
jhon309 0:ac8863619623 933
jhon309 0:ac8863619623 934
jhon309 0:ac8863619623 935 /**
jhon309 0:ac8863619623 936 * @}
jhon309 0:ac8863619623 937 */
jhon309 0:ac8863619623 938
jhon309 0:ac8863619623 939 /**
jhon309 0:ac8863619623 940 * @}
jhon309 0:ac8863619623 941 */
jhon309 0:ac8863619623 942
jhon309 0:ac8863619623 943 #ifdef __cplusplus
jhon309 0:ac8863619623 944 }
jhon309 0:ac8863619623 945 #endif
jhon309 0:ac8863619623 946
jhon309 0:ac8863619623 947
jhon309 0:ac8863619623 948 #endif /* __STM32F0xx_HAL_ADC_H */
jhon309 0:ac8863619623 949
jhon309 0:ac8863619623 950 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
jhon309 0:ac8863619623 951