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