mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Parent:
441:d2c15dda23c1
Child:
630:825f75ca301e
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

Full URL: https://github.com/mbedmicro/mbed/commit/d5b4d2ab9c47edb4dc5776e7177b0c2263459081/

Initial version of drivers for SAMR21

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 340:28d1f895c6fe 1 /**
mbed_official 340:28d1f895c6fe 2 ******************************************************************************
mbed_official 340:28d1f895c6fe 3 * @file stm32f0xx_hal_adc.c
mbed_official 340:28d1f895c6fe 4 * @author MCD Application Team
mbed_official 441:d2c15dda23c1 5 * @version V1.2.0
mbed_official 441:d2c15dda23c1 6 * @date 11-December-2014
mbed_official 340:28d1f895c6fe 7 * @brief This file provides firmware functions to manage the following
mbed_official 340:28d1f895c6fe 8 * functionalities of the Analog to Digital Convertor (ADC)
mbed_official 340:28d1f895c6fe 9 * peripheral:
mbed_official 340:28d1f895c6fe 10 * + Initialization and de-initialization functions
mbed_official 340:28d1f895c6fe 11 * ++ Initialization and Configuration of ADC
mbed_official 340:28d1f895c6fe 12 * + Operation functions
mbed_official 340:28d1f895c6fe 13 * ++ Start, stop, get result of conversions of regular group,
mbed_official 340:28d1f895c6fe 14 * using 3 possible modes: polling, interruption or DMA.
mbed_official 340:28d1f895c6fe 15 * + Control functions
mbed_official 340:28d1f895c6fe 16 * ++ Analog Watchdog configuration
mbed_official 340:28d1f895c6fe 17 * ++ Channels configuration on regular group
mbed_official 340:28d1f895c6fe 18 * + State functions
mbed_official 340:28d1f895c6fe 19 * ++ ADC state machine management
mbed_official 340:28d1f895c6fe 20 * ++ Interrupts and flags management
mbed_official 340:28d1f895c6fe 21 *
mbed_official 340:28d1f895c6fe 22 @verbatim
mbed_official 340:28d1f895c6fe 23 ==============================================================================
mbed_official 340:28d1f895c6fe 24 ##### ADC specific features #####
mbed_official 340:28d1f895c6fe 25 ==============================================================================
mbed_official 340:28d1f895c6fe 26 [..]
mbed_official 340:28d1f895c6fe 27 (#) 12-bit, 10-bit, 8-bit or 6-bit configurable resolution
mbed_official 340:28d1f895c6fe 28
mbed_official 340:28d1f895c6fe 29 (#) Interrupt generation at the end of regular conversion and in case of
mbed_official 340:28d1f895c6fe 30 analog watchdog or overrun events.
mbed_official 340:28d1f895c6fe 31
mbed_official 340:28d1f895c6fe 32 (#) Single and continuous conversion modes.
mbed_official 340:28d1f895c6fe 33
mbed_official 340:28d1f895c6fe 34 (#) Scan mode for automatic conversion of channel 0 to channel 'n'.
mbed_official 340:28d1f895c6fe 35
mbed_official 340:28d1f895c6fe 36 (#) Data alignment with in-built data coherency.
mbed_official 340:28d1f895c6fe 37
mbed_official 340:28d1f895c6fe 38 (#) Programmable sampling time.
mbed_official 340:28d1f895c6fe 39
mbed_official 340:28d1f895c6fe 40 (#) ADC conversion group Regular.
mbed_official 340:28d1f895c6fe 41
mbed_official 340:28d1f895c6fe 42 (#) External trigger (timer or EXTI) with configurable polarity.
mbed_official 340:28d1f895c6fe 43
mbed_official 340:28d1f895c6fe 44 (#) DMA request generation for transfer of conversions data of regular group.
mbed_official 340:28d1f895c6fe 45
mbed_official 340:28d1f895c6fe 46 (#) ADC calibration
mbed_official 340:28d1f895c6fe 47
mbed_official 340:28d1f895c6fe 48 (#) ADC supply requirements: 2.4 V to 3.6 V at full speed and down to 1.8 V at
mbed_official 340:28d1f895c6fe 49 slower speed.
mbed_official 340:28d1f895c6fe 50
mbed_official 340:28d1f895c6fe 51 (#) ADC input range: from Vref minus (connected to Vssa) to Vref plus (connected to
mbed_official 340:28d1f895c6fe 52 Vdda or to an external voltage reference).
mbed_official 340:28d1f895c6fe 53
mbed_official 340:28d1f895c6fe 54
mbed_official 340:28d1f895c6fe 55 ##### How to use this driver #####
mbed_official 340:28d1f895c6fe 56 ==============================================================================
mbed_official 340:28d1f895c6fe 57 [..]
mbed_official 340:28d1f895c6fe 58
mbed_official 340:28d1f895c6fe 59 (#) Enable the ADC interface
mbed_official 340:28d1f895c6fe 60 (++) As prerequisite, into HAL_ADC_MspInit(), ADC clock must be configured
mbed_official 340:28d1f895c6fe 61 at RCC top level: clock source and clock prescaler.
mbed_official 340:28d1f895c6fe 62 (++)Two possible clock sources: synchronous clock derived from APB clock
mbed_official 340:28d1f895c6fe 63 or asynchronous clock derived from ADC dedicated HSI RC oscillator
mbed_official 340:28d1f895c6fe 64 14MHz.
mbed_official 340:28d1f895c6fe 65 (++)Example:
mbed_official 340:28d1f895c6fe 66 __ADC1_CLK_ENABLE(); (mandatory)
mbed_official 340:28d1f895c6fe 67
mbed_official 340:28d1f895c6fe 68 HI14 enable or let under control of ADC: (optional)
mbed_official 340:28d1f895c6fe 69
mbed_official 340:28d1f895c6fe 70 RCC_OscInitTypeDef RCC_OscInitStructure;
mbed_official 340:28d1f895c6fe 71 RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSI14;
mbed_official 340:28d1f895c6fe 72 RCC_OscInitStructure.HSI14CalibrationValue = RCC_HSI14CALIBRATION_DEFAULT;
mbed_official 340:28d1f895c6fe 73 RCC_OscInitStructure.HSI14State = RCC_HSI14_ADC_CONTROL;
mbed_official 340:28d1f895c6fe 74 RCC_OscInitStructure.PLL... (optional if used for system clock)
mbed_official 340:28d1f895c6fe 75 HAL_RCC_OscConfig(&RCC_OscInitStructure);
mbed_official 340:28d1f895c6fe 76
mbed_official 340:28d1f895c6fe 77 Parameter "HSI14State" must be set either:
mbed_official 340:28d1f895c6fe 78 - to "...HSI14State = RCC_HSI14_ADC_CONTROL" to let the ADC control
mbed_official 340:28d1f895c6fe 79 the HSI14 oscillator enable/disable (if not used to supply the main
mbed_official 340:28d1f895c6fe 80 system clock): feature used if ADC mode LowPowerAutoPowerOff is
mbed_official 340:28d1f895c6fe 81 enabled.
mbed_official 340:28d1f895c6fe 82 - to "...HSI14State = RCC_HSI14_ON" to maintain the HSI14 oscillator
mbed_official 340:28d1f895c6fe 83 always enabled: can be used to supply the main system clock.
mbed_official 340:28d1f895c6fe 84
mbed_official 340:28d1f895c6fe 85 (#) ADC pins configuration
mbed_official 340:28d1f895c6fe 86 (++) Enable the clock for the ADC GPIOs using the following function:
mbed_official 340:28d1f895c6fe 87 __GPIOx_CLK_ENABLE();
mbed_official 340:28d1f895c6fe 88 (++) Configure these ADC pins in analog mode using HAL_GPIO_Init();
mbed_official 340:28d1f895c6fe 89
mbed_official 340:28d1f895c6fe 90 (#) Configure the ADC parameters (conversion resolution, data alignment,
mbed_official 340:28d1f895c6fe 91 continuous mode, ...) using the HAL_ADC_Init() function.
mbed_official 340:28d1f895c6fe 92
mbed_official 340:28d1f895c6fe 93 (#) Activate the ADC peripheral using one of the start functions:
mbed_official 340:28d1f895c6fe 94 HAL_ADC_Start(), HAL_ADC_Start_IT(), HAL_ADC_Start_DMA().
mbed_official 340:28d1f895c6fe 95
mbed_official 340:28d1f895c6fe 96 *** Channels configuration to regular group ***
mbed_official 340:28d1f895c6fe 97 ================================================
mbed_official 340:28d1f895c6fe 98 [..]
mbed_official 340:28d1f895c6fe 99 (+) To configure the ADC regular group features, use
mbed_official 340:28d1f895c6fe 100 HAL_ADC_Init() and HAL_ADC_ConfigChannel() functions.
mbed_official 340:28d1f895c6fe 101 (+) To activate the continuous mode, use the HAL_ADC_Init() function.
mbed_official 340:28d1f895c6fe 102 (+) To read the ADC converted values, use the HAL_ADC_GetValue() function.
mbed_official 340:28d1f895c6fe 103
mbed_official 340:28d1f895c6fe 104 *** DMA for regular configuration ***
mbed_official 340:28d1f895c6fe 105 =============================================================
mbed_official 340:28d1f895c6fe 106 [..]
mbed_official 340:28d1f895c6fe 107 (+) To enable the DMA mode for regular group, use the
mbed_official 340:28d1f895c6fe 108 HAL_ADC_Start_DMA() function.
mbed_official 340:28d1f895c6fe 109 (+) To enable the generation of DMA requests continuously at the end of
mbed_official 340:28d1f895c6fe 110 the last DMA transfer, use the HAL_ADC_Init() function.
mbed_official 340:28d1f895c6fe 111
mbed_official 340:28d1f895c6fe 112 @endverbatim
mbed_official 340:28d1f895c6fe 113 ******************************************************************************
mbed_official 340:28d1f895c6fe 114 * @attention
mbed_official 340:28d1f895c6fe 115 *
mbed_official 340:28d1f895c6fe 116 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 340:28d1f895c6fe 117 *
mbed_official 340:28d1f895c6fe 118 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 340:28d1f895c6fe 119 * are permitted provided that the following conditions are met:
mbed_official 340:28d1f895c6fe 120 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 340:28d1f895c6fe 121 * this list of conditions and the following disclaimer.
mbed_official 340:28d1f895c6fe 122 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 340:28d1f895c6fe 123 * this list of conditions and the following disclaimer in the documentation
mbed_official 340:28d1f895c6fe 124 * and/or other materials provided with the distribution.
mbed_official 340:28d1f895c6fe 125 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 340:28d1f895c6fe 126 * may be used to endorse or promote products derived from this software
mbed_official 340:28d1f895c6fe 127 * without specific prior written permission.
mbed_official 340:28d1f895c6fe 128 *
mbed_official 340:28d1f895c6fe 129 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 340:28d1f895c6fe 130 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 340:28d1f895c6fe 131 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 340:28d1f895c6fe 132 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 340:28d1f895c6fe 133 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 340:28d1f895c6fe 134 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 340:28d1f895c6fe 135 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 340:28d1f895c6fe 136 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 340:28d1f895c6fe 137 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 340:28d1f895c6fe 138 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 340:28d1f895c6fe 139 *
mbed_official 340:28d1f895c6fe 140 ******************************************************************************
mbed_official 340:28d1f895c6fe 141 */
mbed_official 340:28d1f895c6fe 142
mbed_official 340:28d1f895c6fe 143 /* Includes ------------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 144 #include "stm32f0xx_hal.h"
mbed_official 340:28d1f895c6fe 145
mbed_official 340:28d1f895c6fe 146 /** @addtogroup STM32F0xx_HAL_Driver
mbed_official 340:28d1f895c6fe 147 * @{
mbed_official 340:28d1f895c6fe 148 */
mbed_official 340:28d1f895c6fe 149
mbed_official 340:28d1f895c6fe 150 /** @defgroup ADC ADC HAL module driver
mbed_official 340:28d1f895c6fe 151 * @brief ADC HAL module driver
mbed_official 340:28d1f895c6fe 152 * @{
mbed_official 340:28d1f895c6fe 153 */
mbed_official 340:28d1f895c6fe 154
mbed_official 340:28d1f895c6fe 155 #ifdef HAL_ADC_MODULE_ENABLED
mbed_official 340:28d1f895c6fe 156
mbed_official 340:28d1f895c6fe 157 /* Private typedef -----------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 158 /* Private define ------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 159 /** @defgroup ADC_Private_Constants ADC Private Constants
mbed_official 340:28d1f895c6fe 160 * @{
mbed_official 340:28d1f895c6fe 161 */
mbed_official 340:28d1f895c6fe 162
mbed_official 340:28d1f895c6fe 163 /* Fixed timeout values for ADC calibration, enable settling time, disable */
mbed_official 340:28d1f895c6fe 164 /* settling time. */
mbed_official 340:28d1f895c6fe 165 /* Values defined to be higher than worst cases: low clock frequency, */
mbed_official 340:28d1f895c6fe 166 /* maximum prescaler. */
mbed_official 340:28d1f895c6fe 167 /* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock */
mbed_official 340:28d1f895c6fe 168 /* prescaler 4, sampling time 7.5 ADC clock cycles, resolution 12 bits. */
mbed_official 340:28d1f895c6fe 169 /* Unit: ms */
mbed_official 340:28d1f895c6fe 170 #define ADC_ENABLE_TIMEOUT ((uint32_t) 2)
mbed_official 340:28d1f895c6fe 171 #define ADC_DISABLE_TIMEOUT ((uint32_t) 2)
mbed_official 340:28d1f895c6fe 172 #define ADC_STOP_CONVERSION_TIMEOUT ((uint32_t) 2)
mbed_official 340:28d1f895c6fe 173
mbed_official 340:28d1f895c6fe 174 /* Delay for temperature sensor stabilization time. */
mbed_official 340:28d1f895c6fe 175 /* Maximum delay is 10us (refer to device datasheet, parameter tSTART). */
mbed_official 340:28d1f895c6fe 176 /* Delay in CPU cycles, fixed to worst case: maximum CPU frequency 48MHz to */
mbed_official 340:28d1f895c6fe 177 /* have the minimum number of CPU cycles to fulfill this delay. */
mbed_official 340:28d1f895c6fe 178 #define ADC_TEMPSENSOR_DELAY_CPU_CYCLES ((uint32_t) 480)
mbed_official 340:28d1f895c6fe 179
mbed_official 340:28d1f895c6fe 180 /* Delay for ADC stabilization time. */
mbed_official 340:28d1f895c6fe 181 /* Maximum delay is 1us (refer to device datasheet, parameter tSTAB). */
mbed_official 340:28d1f895c6fe 182 /* Delay in CPU cycles, fixed to worst case: maximum CPU frequency 48MHz to */
mbed_official 340:28d1f895c6fe 183 /* have the minimum number of CPU cycles to fulfill this delay. */
mbed_official 340:28d1f895c6fe 184 #define ADC_STAB_DELAY_CPU_CYCLES ((uint32_t)48)
mbed_official 340:28d1f895c6fe 185 /**
mbed_official 340:28d1f895c6fe 186 * @}
mbed_official 340:28d1f895c6fe 187 */
mbed_official 340:28d1f895c6fe 188
mbed_official 340:28d1f895c6fe 189 /* Private macro -------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 190 /* Private variables ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 191 /* Private function prototypes -----------------------------------------------*/
mbed_official 340:28d1f895c6fe 192 /** @defgroup ADC_Private_Functions ADC Private Functions
mbed_official 340:28d1f895c6fe 193 * @{
mbed_official 340:28d1f895c6fe 194 */
mbed_official 340:28d1f895c6fe 195 static HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc);
mbed_official 340:28d1f895c6fe 196 static HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef* hadc);
mbed_official 340:28d1f895c6fe 197 static HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef* hadc);
mbed_official 340:28d1f895c6fe 198 static void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 340:28d1f895c6fe 199 static void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 340:28d1f895c6fe 200 static void ADC_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 340:28d1f895c6fe 201 /**
mbed_official 340:28d1f895c6fe 202 * @}
mbed_official 340:28d1f895c6fe 203 */
mbed_official 340:28d1f895c6fe 204
mbed_official 340:28d1f895c6fe 205 /* Exported functions ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 206
mbed_official 340:28d1f895c6fe 207 /** @defgroup ADC_Exported_Functions ADC Exported Functions
mbed_official 340:28d1f895c6fe 208 * @{
mbed_official 340:28d1f895c6fe 209 */
mbed_official 340:28d1f895c6fe 210
mbed_official 340:28d1f895c6fe 211 /** @defgroup ADC_Exported_Functions_Group1 Initialization/de-initialization functions
mbed_official 340:28d1f895c6fe 212 * @brief Initialization and Configuration functions
mbed_official 340:28d1f895c6fe 213 *
mbed_official 340:28d1f895c6fe 214 @verbatim
mbed_official 340:28d1f895c6fe 215 ===============================================================================
mbed_official 340:28d1f895c6fe 216 ##### Initialization and de-initialization functions #####
mbed_official 340:28d1f895c6fe 217 ===============================================================================
mbed_official 340:28d1f895c6fe 218 [..] This section provides functions allowing to:
mbed_official 340:28d1f895c6fe 219 (+) Initialize and configure the ADC.
mbed_official 340:28d1f895c6fe 220 (+) De-initialize the ADC
mbed_official 340:28d1f895c6fe 221 @endverbatim
mbed_official 340:28d1f895c6fe 222 * @{
mbed_official 340:28d1f895c6fe 223 */
mbed_official 340:28d1f895c6fe 224
mbed_official 340:28d1f895c6fe 225 /**
mbed_official 340:28d1f895c6fe 226 * @brief Initializes the ADC peripheral and regular group according to
mbed_official 340:28d1f895c6fe 227 * parameters specified in structure "ADC_InitTypeDef".
mbed_official 340:28d1f895c6fe 228 * @note As prerequisite, ADC clock must be configured at RCC top level
mbed_official 340:28d1f895c6fe 229 * depending on both possible clock sources: APB clock of HSI clock.
mbed_official 340:28d1f895c6fe 230 * See commented example code below that can be copied and uncommented
mbed_official 340:28d1f895c6fe 231 * into HAL_ADC_MspInit().
mbed_official 340:28d1f895c6fe 232 * @note Possibility to update parameters on the fly:
mbed_official 340:28d1f895c6fe 233 * This function initializes the ADC MSP (HAL_ADC_MspInit()) only when
mbed_official 340:28d1f895c6fe 234 * coming from ADC state reset. Following calls to this function can
mbed_official 340:28d1f895c6fe 235 * be used to reconfigure some parameters of ADC_InitTypeDef
mbed_official 340:28d1f895c6fe 236 * structure on the fly, without modifying MSP configuration. If ADC
mbed_official 340:28d1f895c6fe 237 * MSP has to be modified again, HAL_ADC_DeInit() must be called
mbed_official 340:28d1f895c6fe 238 * before HAL_ADC_Init().
mbed_official 340:28d1f895c6fe 239 * The setting of these parameters is conditioned to ADC state.
mbed_official 340:28d1f895c6fe 240 * For parameters constraints, see comments of structure
mbed_official 340:28d1f895c6fe 241 * "ADC_InitTypeDef".
mbed_official 340:28d1f895c6fe 242 * @note This function configures the ADC within 2 scopes: scope of entire
mbed_official 340:28d1f895c6fe 243 * ADC and scope of regular group. For parameters details, see comments
mbed_official 340:28d1f895c6fe 244 * of structure "ADC_InitTypeDef".
mbed_official 340:28d1f895c6fe 245 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 246 * @retval HAL status
mbed_official 340:28d1f895c6fe 247 */
mbed_official 340:28d1f895c6fe 248 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 249 {
mbed_official 340:28d1f895c6fe 250 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 251 uint32_t tmpCFGR1 = 0;
mbed_official 340:28d1f895c6fe 252
mbed_official 340:28d1f895c6fe 253 /* Check ADC handle */
mbed_official 441:d2c15dda23c1 254 if(hadc == NULL)
mbed_official 340:28d1f895c6fe 255 {
mbed_official 340:28d1f895c6fe 256 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 257 }
mbed_official 340:28d1f895c6fe 258
mbed_official 340:28d1f895c6fe 259 /* Check the parameters */
mbed_official 340:28d1f895c6fe 260 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 261 assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler));
mbed_official 340:28d1f895c6fe 262 assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution));
mbed_official 340:28d1f895c6fe 263 assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));
mbed_official 340:28d1f895c6fe 264 assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));
mbed_official 340:28d1f895c6fe 265 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 340:28d1f895c6fe 266 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));
mbed_official 340:28d1f895c6fe 267 assert_param(IS_ADC_EXTTRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 340:28d1f895c6fe 268 assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));
mbed_official 340:28d1f895c6fe 269 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests));
mbed_official 340:28d1f895c6fe 270 assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
mbed_official 340:28d1f895c6fe 271 assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
mbed_official 340:28d1f895c6fe 272 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
mbed_official 340:28d1f895c6fe 273 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoPowerOff));
mbed_official 340:28d1f895c6fe 274
mbed_official 340:28d1f895c6fe 275 /* As prerequisite, into HAL_ADC_MspInit(), ADC clock must be configured */
mbed_official 340:28d1f895c6fe 276 /* at RCC top level depending on both possible clock sources: */
mbed_official 340:28d1f895c6fe 277 /* APB clock or HSI clock. */
mbed_official 340:28d1f895c6fe 278 /* Refer to header of this file for more details on clock enabling procedure*/
mbed_official 340:28d1f895c6fe 279
mbed_official 340:28d1f895c6fe 280 /* Actions performed only if ADC is coming from state reset: */
mbed_official 340:28d1f895c6fe 281 /* - Initialization of ADC MSP */
mbed_official 340:28d1f895c6fe 282 /* - ADC voltage regulator enable */
mbed_official 340:28d1f895c6fe 283 if (hadc->State == HAL_ADC_STATE_RESET)
mbed_official 340:28d1f895c6fe 284 {
mbed_official 340:28d1f895c6fe 285 /* Init the low level hardware */
mbed_official 340:28d1f895c6fe 286 HAL_ADC_MspInit(hadc);
mbed_official 340:28d1f895c6fe 287
mbed_official 340:28d1f895c6fe 288 }
mbed_official 340:28d1f895c6fe 289
mbed_official 340:28d1f895c6fe 290 /* Configuration of ADC parameters if previous preliminary actions are */
mbed_official 340:28d1f895c6fe 291 /* correctly completed. */
mbed_official 340:28d1f895c6fe 292 /* and if there is no conversion on going on regular group (ADC can be */
mbed_official 340:28d1f895c6fe 293 /* enabled anyway, in case of call of this function to update a parameter */
mbed_official 340:28d1f895c6fe 294 /* on the fly). */
mbed_official 340:28d1f895c6fe 295 if ((hadc->State != HAL_ADC_STATE_ERROR) &&
mbed_official 340:28d1f895c6fe 296 (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET) )
mbed_official 340:28d1f895c6fe 297 {
mbed_official 340:28d1f895c6fe 298 /* Initialize the ADC state */
mbed_official 340:28d1f895c6fe 299 hadc->State = HAL_ADC_STATE_BUSY;
mbed_official 340:28d1f895c6fe 300
mbed_official 340:28d1f895c6fe 301 /* Parameters update conditioned to ADC state: */
mbed_official 340:28d1f895c6fe 302 /* Parameters that can be updated only when ADC is disabled: */
mbed_official 340:28d1f895c6fe 303 /* - ADC clock mode */
mbed_official 340:28d1f895c6fe 304 /* - ADC clock prescaler */
mbed_official 340:28d1f895c6fe 305 if (__HAL_ADC_IS_ENABLED(hadc) == RESET)
mbed_official 340:28d1f895c6fe 306 {
mbed_official 340:28d1f895c6fe 307 /* Some parameters of this register are not reset, since they are set */
mbed_official 340:28d1f895c6fe 308 /* by other functions and must be kept in case of usage of this */
mbed_official 340:28d1f895c6fe 309 /* function on the fly (update of a parameter of ADC_InitTypeDef */
mbed_official 340:28d1f895c6fe 310 /* without needing to reconfigure all other ADC groups/channels */
mbed_official 340:28d1f895c6fe 311 /* parameters): */
mbed_official 340:28d1f895c6fe 312 /* - internal measurement paths: Vbat, temperature sensor, Vref */
mbed_official 340:28d1f895c6fe 313 /* (set into HAL_ADC_ConfigChannel() ) */
mbed_official 340:28d1f895c6fe 314
mbed_official 340:28d1f895c6fe 315 /* Reset configuration of ADC configuration register CFGR2: */
mbed_official 340:28d1f895c6fe 316 /* - ADC clock mode: CKMODE */
mbed_official 340:28d1f895c6fe 317 hadc->Instance->CFGR2 &= ~(ADC_CFGR2_CKMODE);
mbed_official 340:28d1f895c6fe 318
mbed_official 340:28d1f895c6fe 319 /* Configuration of ADC clock mode: clock source AHB or HSI with */
mbed_official 340:28d1f895c6fe 320 /* selectable prescaler */
mbed_official 340:28d1f895c6fe 321 hadc->Instance->CFGR2 |= hadc->Init.ClockPrescaler;
mbed_official 340:28d1f895c6fe 322 }
mbed_official 340:28d1f895c6fe 323
mbed_official 340:28d1f895c6fe 324 /* Configuration of ADC: */
mbed_official 340:28d1f895c6fe 325 /* - discontinuous mode */
mbed_official 340:28d1f895c6fe 326 /* - LowPowerAutoWait mode */
mbed_official 340:28d1f895c6fe 327 /* - LowPowerAutoPowerOff mode */
mbed_official 340:28d1f895c6fe 328 /* - continuous conversion mode */
mbed_official 340:28d1f895c6fe 329 /* - overrun */
mbed_official 340:28d1f895c6fe 330 /* - external trigger to start conversion */
mbed_official 340:28d1f895c6fe 331 /* - external trigger polarity */
mbed_official 340:28d1f895c6fe 332 /* - data alignment */
mbed_official 340:28d1f895c6fe 333 /* - resolution */
mbed_official 340:28d1f895c6fe 334 /* - scan direction */
mbed_official 340:28d1f895c6fe 335 /* - DMA continuous request */
mbed_official 340:28d1f895c6fe 336 hadc->Instance->CFGR1 &= ~( ADC_CFGR1_DISCEN |
mbed_official 340:28d1f895c6fe 337 ADC_CFGR1_AUTOFF |
mbed_official 340:28d1f895c6fe 338 ADC_CFGR1_AUTDLY |
mbed_official 340:28d1f895c6fe 339 ADC_CFGR1_CONT |
mbed_official 340:28d1f895c6fe 340 ADC_CFGR1_OVRMOD |
mbed_official 340:28d1f895c6fe 341 ADC_CFGR1_EXTSEL |
mbed_official 340:28d1f895c6fe 342 ADC_CFGR1_EXTEN |
mbed_official 340:28d1f895c6fe 343 ADC_CFGR1_ALIGN |
mbed_official 340:28d1f895c6fe 344 ADC_CFGR1_RES |
mbed_official 340:28d1f895c6fe 345 ADC_CFGR1_SCANDIR |
mbed_official 340:28d1f895c6fe 346 ADC_CFGR1_DMACFG );
mbed_official 340:28d1f895c6fe 347
mbed_official 340:28d1f895c6fe 348 tmpCFGR1 |= (__HAL_ADC_CFGR1_AUTOWAIT(hadc->Init.LowPowerAutoWait) |
mbed_official 340:28d1f895c6fe 349 __HAL_ADC_CFGR1_AUTOOFF(hadc->Init.LowPowerAutoPowerOff) |
mbed_official 340:28d1f895c6fe 350 __HAL_ADC_CFGR1_CONTINUOUS(hadc->Init.ContinuousConvMode) |
mbed_official 340:28d1f895c6fe 351 __HAL_ADC_CFGR1_OVERRUN(hadc->Init.Overrun) |
mbed_official 340:28d1f895c6fe 352 hadc->Init.DataAlign |
mbed_official 340:28d1f895c6fe 353 hadc->Init.Resolution |
mbed_official 340:28d1f895c6fe 354 __HAL_ADC_CFGR1_SCANDIR(hadc->Init.ScanConvMode) |
mbed_official 340:28d1f895c6fe 355 __HAL_ADC_CFGR1_DMACONTREQ(hadc->Init.DMAContinuousRequests) );
mbed_official 340:28d1f895c6fe 356
mbed_official 340:28d1f895c6fe 357 /* Enable discontinuous mode only if continuous mode is disabled */
mbed_official 340:28d1f895c6fe 358 if ((hadc->Init.DiscontinuousConvMode == ENABLE) &&
mbed_official 340:28d1f895c6fe 359 (hadc->Init.ContinuousConvMode == DISABLE) )
mbed_official 340:28d1f895c6fe 360 {
mbed_official 340:28d1f895c6fe 361 /* Enable discontinuous mode of regular group */
mbed_official 340:28d1f895c6fe 362 tmpCFGR1 |= ADC_CFGR1_DISCEN;
mbed_official 340:28d1f895c6fe 363 }
mbed_official 340:28d1f895c6fe 364
mbed_official 340:28d1f895c6fe 365 /* Enable external trigger if trigger selection is different of software */
mbed_official 340:28d1f895c6fe 366 /* start. */
mbed_official 441:d2c15dda23c1 367 /* @Note: This configuration keeps the hardware feature of parameter */
mbed_official 340:28d1f895c6fe 368 /* ExternalTrigConvEdge "trigger edge none" equivalent to */
mbed_official 340:28d1f895c6fe 369 /* software start. */
mbed_official 340:28d1f895c6fe 370 if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
mbed_official 340:28d1f895c6fe 371 {
mbed_official 340:28d1f895c6fe 372 tmpCFGR1 |= ( hadc->Init.ExternalTrigConv |
mbed_official 340:28d1f895c6fe 373 hadc->Init.ExternalTrigConvEdge );
mbed_official 340:28d1f895c6fe 374 }
mbed_official 340:28d1f895c6fe 375
mbed_official 340:28d1f895c6fe 376 /* Update ADC configuration register with previous settings */
mbed_official 340:28d1f895c6fe 377 hadc->Instance->CFGR1 |= tmpCFGR1;
mbed_official 340:28d1f895c6fe 378
mbed_official 340:28d1f895c6fe 379 /* Check back that ADC registers have effectively been configured to */
mbed_official 340:28d1f895c6fe 380 /* ensure of no potential problem of ADC core IP clocking. */
mbed_official 340:28d1f895c6fe 381 /* Check through register CFGR1 (excluding analog watchdog configuration: */
mbed_official 340:28d1f895c6fe 382 /* set into separate dedicated function). */
mbed_official 340:28d1f895c6fe 383 if ((hadc->Instance->CFGR1 & ~(ADC_CFGR1_AWDCH | ADC_CFGR1_AWDEN | ADC_CFGR1_AWDSGL))
mbed_official 340:28d1f895c6fe 384 == tmpCFGR1)
mbed_official 340:28d1f895c6fe 385 {
mbed_official 340:28d1f895c6fe 386 /* Set ADC error code to none */
mbed_official 340:28d1f895c6fe 387 __HAL_ADC_CLEAR_ERRORCODE(hadc);
mbed_official 340:28d1f895c6fe 388
mbed_official 340:28d1f895c6fe 389 /* Initialize the ADC state */
mbed_official 340:28d1f895c6fe 390 hadc->State = HAL_ADC_STATE_READY;
mbed_official 340:28d1f895c6fe 391 }
mbed_official 340:28d1f895c6fe 392 else
mbed_official 340:28d1f895c6fe 393 {
mbed_official 340:28d1f895c6fe 394 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 395 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 396
mbed_official 340:28d1f895c6fe 397 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 398 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 399
mbed_official 340:28d1f895c6fe 400 tmpHALStatus = HAL_ERROR;
mbed_official 340:28d1f895c6fe 401 }
mbed_official 340:28d1f895c6fe 402
mbed_official 340:28d1f895c6fe 403 }
mbed_official 340:28d1f895c6fe 404 else
mbed_official 340:28d1f895c6fe 405 {
mbed_official 340:28d1f895c6fe 406 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 407 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 408
mbed_official 340:28d1f895c6fe 409 tmpHALStatus = HAL_ERROR;
mbed_official 340:28d1f895c6fe 410 }
mbed_official 340:28d1f895c6fe 411
mbed_official 340:28d1f895c6fe 412 /* Return function status */
mbed_official 340:28d1f895c6fe 413 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 414 }
mbed_official 340:28d1f895c6fe 415
mbed_official 340:28d1f895c6fe 416
mbed_official 340:28d1f895c6fe 417 /**
mbed_official 340:28d1f895c6fe 418 * @brief Deinitialize the ADC peripheral registers to their default reset
mbed_official 340:28d1f895c6fe 419 * values, with deinitialization of the ADC MSP.
mbed_official 340:28d1f895c6fe 420 * @note For devices with several ADCs: reset of ADC common registers is done
mbed_official 340:28d1f895c6fe 421 * only if all ADCs sharing the same common group are disabled.
mbed_official 340:28d1f895c6fe 422 * If this is not the case, reset of these common parameters reset is
mbed_official 340:28d1f895c6fe 423 * bypassed without error reporting: it can be the intended behaviour in
mbed_official 340:28d1f895c6fe 424 * case of reset of a single ADC while the other ADCs sharing the same
mbed_official 340:28d1f895c6fe 425 * common group is still running.
mbed_official 340:28d1f895c6fe 426 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 427 * @retval HAL status
mbed_official 340:28d1f895c6fe 428 */
mbed_official 340:28d1f895c6fe 429 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 430 {
mbed_official 340:28d1f895c6fe 431 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 432
mbed_official 340:28d1f895c6fe 433 /* Check ADC handle */
mbed_official 441:d2c15dda23c1 434 if(hadc == NULL)
mbed_official 340:28d1f895c6fe 435 {
mbed_official 340:28d1f895c6fe 436 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 437 }
mbed_official 340:28d1f895c6fe 438
mbed_official 340:28d1f895c6fe 439 /* Check the parameters */
mbed_official 340:28d1f895c6fe 440 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 441
mbed_official 340:28d1f895c6fe 442 /* Change ADC state */
mbed_official 340:28d1f895c6fe 443 hadc->State = HAL_ADC_STATE_BUSY;
mbed_official 340:28d1f895c6fe 444
mbed_official 340:28d1f895c6fe 445 /* Stop potential conversion on going, on regular group */
mbed_official 340:28d1f895c6fe 446 tmpHALStatus = ADC_ConversionStop(hadc);
mbed_official 340:28d1f895c6fe 447
mbed_official 340:28d1f895c6fe 448 /* Disable ADC peripheral if conversions are effectively stopped */
mbed_official 340:28d1f895c6fe 449 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 450 {
mbed_official 340:28d1f895c6fe 451 /* Disable the ADC peripheral */
mbed_official 340:28d1f895c6fe 452 tmpHALStatus = ADC_Disable(hadc);
mbed_official 340:28d1f895c6fe 453
mbed_official 340:28d1f895c6fe 454 /* Check if ADC is effectively disabled */
mbed_official 340:28d1f895c6fe 455 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 456 {
mbed_official 340:28d1f895c6fe 457 /* Change ADC state */
mbed_official 340:28d1f895c6fe 458 hadc->State = HAL_ADC_STATE_READY;
mbed_official 340:28d1f895c6fe 459 }
mbed_official 340:28d1f895c6fe 460 }
mbed_official 340:28d1f895c6fe 461
mbed_official 340:28d1f895c6fe 462
mbed_official 340:28d1f895c6fe 463 /* Configuration of ADC parameters if previous preliminary actions are */
mbed_official 340:28d1f895c6fe 464 /* correctly completed. */
mbed_official 340:28d1f895c6fe 465 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 466 {
mbed_official 340:28d1f895c6fe 467
mbed_official 340:28d1f895c6fe 468 /* ========== Reset ADC registers ========== */
mbed_official 340:28d1f895c6fe 469 /* Reset register IER */
mbed_official 340:28d1f895c6fe 470 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_AWD | ADC_IT_OVR |
mbed_official 340:28d1f895c6fe 471 ADC_IT_EOS | ADC_IT_EOC |
mbed_official 340:28d1f895c6fe 472 ADC_IT_EOSMP | ADC_IT_RDY ) );
mbed_official 340:28d1f895c6fe 473
mbed_official 340:28d1f895c6fe 474 /* Reset register ISR */
mbed_official 340:28d1f895c6fe 475 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_AWD | ADC_FLAG_OVR |
mbed_official 340:28d1f895c6fe 476 ADC_FLAG_EOS | ADC_FLAG_EOC |
mbed_official 340:28d1f895c6fe 477 ADC_FLAG_EOSMP | ADC_FLAG_RDY ) );
mbed_official 340:28d1f895c6fe 478
mbed_official 340:28d1f895c6fe 479 /* Reset register CR */
mbed_official 340:28d1f895c6fe 480 /* Bits ADC_CR_ADCAL, ADC_CR_ADSTP, ADC_CR_ADSTART are in access mode */
mbed_official 340:28d1f895c6fe 481 /* "read-set": no direct reset applicable. */
mbed_official 340:28d1f895c6fe 482
mbed_official 340:28d1f895c6fe 483 /* Reset register CFGR1 */
mbed_official 340:28d1f895c6fe 484 hadc->Instance->CFGR1 &= ~(ADC_CFGR1_AWDCH | ADC_CFGR1_AWDEN | ADC_CFGR1_AWDSGL | ADC_CFGR1_DISCEN |
mbed_official 340:28d1f895c6fe 485 ADC_CFGR1_AUTOFF | ADC_CFGR1_WAIT | ADC_CFGR1_CONT | ADC_CFGR1_OVRMOD |
mbed_official 340:28d1f895c6fe 486 ADC_CFGR1_EXTEN | ADC_CFGR1_EXTSEL | ADC_CFGR1_ALIGN | ADC_CFGR1_RES |
mbed_official 340:28d1f895c6fe 487 ADC_CFGR1_SCANDIR | ADC_CFGR1_DMACFG | ADC_CFGR1_DMAEN );
mbed_official 340:28d1f895c6fe 488
mbed_official 340:28d1f895c6fe 489 /* Reset register CFGR2 */
mbed_official 441:d2c15dda23c1 490 /* @Note: Update of ADC clock mode is conditioned to ADC state disabled: */
mbed_official 340:28d1f895c6fe 491 /* already done above. */
mbed_official 340:28d1f895c6fe 492 hadc->Instance->CFGR2 &= ~ADC_CFGR2_CKMODE;
mbed_official 340:28d1f895c6fe 493
mbed_official 340:28d1f895c6fe 494 /* Reset register SMPR */
mbed_official 340:28d1f895c6fe 495 hadc->Instance->SMPR &= ~ADC_SMPR_SMP;
mbed_official 340:28d1f895c6fe 496
mbed_official 340:28d1f895c6fe 497 /* Reset register TR1 */
mbed_official 340:28d1f895c6fe 498 hadc->Instance->TR &= ~(ADC_TR_HT | ADC_TR_LT);
mbed_official 340:28d1f895c6fe 499
mbed_official 340:28d1f895c6fe 500 /* Reset register CHSELR */
mbed_official 340:28d1f895c6fe 501 hadc->Instance->CHSELR &= ~(ADC_CHSELR_CHSEL18 | ADC_CHSELR_CHSEL17 | ADC_CHSELR_CHSEL16 |
mbed_official 340:28d1f895c6fe 502 ADC_CHSELR_CHSEL15 | ADC_CHSELR_CHSEL14 | ADC_CHSELR_CHSEL13 | ADC_CHSELR_CHSEL12 |
mbed_official 340:28d1f895c6fe 503 ADC_CHSELR_CHSEL11 | ADC_CHSELR_CHSEL10 | ADC_CHSELR_CHSEL9 | ADC_CHSELR_CHSEL8 |
mbed_official 340:28d1f895c6fe 504 ADC_CHSELR_CHSEL7 | ADC_CHSELR_CHSEL6 | ADC_CHSELR_CHSEL5 | ADC_CHSELR_CHSEL4 |
mbed_official 340:28d1f895c6fe 505 ADC_CHSELR_CHSEL3 | ADC_CHSELR_CHSEL2 | ADC_CHSELR_CHSEL1 | ADC_CHSELR_CHSEL0 );
mbed_official 340:28d1f895c6fe 506
mbed_official 340:28d1f895c6fe 507 /* Reset register DR */
mbed_official 340:28d1f895c6fe 508 /* bits in access mode read only, no direct reset applicable*/
mbed_official 340:28d1f895c6fe 509
mbed_official 340:28d1f895c6fe 510 /* Reset register CCR */
mbed_official 340:28d1f895c6fe 511 ADC->CCR &= ~( ADC_CCR_VBATEN |
mbed_official 340:28d1f895c6fe 512 ADC_CCR_TSEN |
mbed_official 340:28d1f895c6fe 513 ADC_CCR_VREFEN );
mbed_official 340:28d1f895c6fe 514
mbed_official 340:28d1f895c6fe 515 /* ========== Hard reset ADC peripheral ========== */
mbed_official 340:28d1f895c6fe 516 /* Performs a global reset of the entire ADC peripheral: ADC state is */
mbed_official 340:28d1f895c6fe 517 /* forced to a similar state after device power-on. */
mbed_official 340:28d1f895c6fe 518 /* If needed, copy-paste and uncomment the following reset code into */
mbed_official 340:28d1f895c6fe 519 /* function "void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)": */
mbed_official 340:28d1f895c6fe 520 /* */
mbed_official 340:28d1f895c6fe 521 /* __ADC1_FORCE_RESET() */
mbed_official 340:28d1f895c6fe 522 /* __ADC1_RELEASE_RESET() */
mbed_official 340:28d1f895c6fe 523
mbed_official 340:28d1f895c6fe 524 /* DeInit the low level hardware */
mbed_official 340:28d1f895c6fe 525 HAL_ADC_MspDeInit(hadc);
mbed_official 340:28d1f895c6fe 526
mbed_official 340:28d1f895c6fe 527 /* Set ADC error code to none */
mbed_official 340:28d1f895c6fe 528 __HAL_ADC_CLEAR_ERRORCODE(hadc);
mbed_official 340:28d1f895c6fe 529
mbed_official 340:28d1f895c6fe 530 /* Change ADC state */
mbed_official 340:28d1f895c6fe 531 hadc->State = HAL_ADC_STATE_RESET;
mbed_official 340:28d1f895c6fe 532 }
mbed_official 340:28d1f895c6fe 533
mbed_official 340:28d1f895c6fe 534 /* Process unlocked */
mbed_official 340:28d1f895c6fe 535 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 536
mbed_official 340:28d1f895c6fe 537 /* Return function status */
mbed_official 340:28d1f895c6fe 538 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 539 }
mbed_official 340:28d1f895c6fe 540
mbed_official 340:28d1f895c6fe 541
mbed_official 340:28d1f895c6fe 542 /**
mbed_official 340:28d1f895c6fe 543 * @brief Initializes the ADC MSP.
mbed_official 340:28d1f895c6fe 544 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 545 * @retval None
mbed_official 340:28d1f895c6fe 546 */
mbed_official 340:28d1f895c6fe 547 __weak void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 548 {
mbed_official 340:28d1f895c6fe 549 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 550 function HAL_ADC_MspInit must be implemented in the user file.
mbed_official 340:28d1f895c6fe 551 */
mbed_official 340:28d1f895c6fe 552 }
mbed_official 340:28d1f895c6fe 553
mbed_official 340:28d1f895c6fe 554 /**
mbed_official 340:28d1f895c6fe 555 * @brief DeInitializes the ADC MSP.
mbed_official 340:28d1f895c6fe 556 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 557 * @retval None
mbed_official 340:28d1f895c6fe 558 */
mbed_official 340:28d1f895c6fe 559 __weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 560 {
mbed_official 340:28d1f895c6fe 561 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 562 function HAL_ADC_MspDeInit must be implemented in the user file.
mbed_official 340:28d1f895c6fe 563 */
mbed_official 340:28d1f895c6fe 564 }
mbed_official 340:28d1f895c6fe 565
mbed_official 340:28d1f895c6fe 566 /**
mbed_official 340:28d1f895c6fe 567 * @}
mbed_official 340:28d1f895c6fe 568 */
mbed_official 340:28d1f895c6fe 569
mbed_official 340:28d1f895c6fe 570 /** @defgroup ADC_Exported_Functions_Group2 IO operation functions
mbed_official 340:28d1f895c6fe 571 * @brief IO operation functions
mbed_official 340:28d1f895c6fe 572 *
mbed_official 340:28d1f895c6fe 573 @verbatim
mbed_official 340:28d1f895c6fe 574 ===============================================================================
mbed_official 340:28d1f895c6fe 575 ##### IO operation functions #####
mbed_official 340:28d1f895c6fe 576 ===============================================================================
mbed_official 340:28d1f895c6fe 577 [..] This section provides functions allowing to:
mbed_official 340:28d1f895c6fe 578 (+) Start conversion of regular group.
mbed_official 340:28d1f895c6fe 579 (+) Stop conversion of regular group.
mbed_official 340:28d1f895c6fe 580 (+) Poll for conversion complete on regular group.
mbed_official 340:28d1f895c6fe 581 (+) Poll for conversion event.
mbed_official 340:28d1f895c6fe 582 (+) Get result of regular channel conversion.
mbed_official 340:28d1f895c6fe 583 (+) Start conversion of regular group and enable interruptions.
mbed_official 340:28d1f895c6fe 584 (+) Stop conversion of regular group and disable interruptions.
mbed_official 340:28d1f895c6fe 585 (+) Handle ADC interrupt request
mbed_official 340:28d1f895c6fe 586 (+) Start conversion of regular group and enable DMA transfer.
mbed_official 340:28d1f895c6fe 587 (+) Stop conversion of regular group and disable ADC DMA transfer.
mbed_official 340:28d1f895c6fe 588 @endverbatim
mbed_official 340:28d1f895c6fe 589 * @{
mbed_official 340:28d1f895c6fe 590 */
mbed_official 340:28d1f895c6fe 591
mbed_official 340:28d1f895c6fe 592 /**
mbed_official 340:28d1f895c6fe 593 * @brief Enables ADC, starts conversion of regular group.
mbed_official 340:28d1f895c6fe 594 * Interruptions enabled in this function: None.
mbed_official 340:28d1f895c6fe 595 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 596 * @retval HAL status
mbed_official 340:28d1f895c6fe 597 */
mbed_official 340:28d1f895c6fe 598 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 599 {
mbed_official 340:28d1f895c6fe 600 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 601
mbed_official 340:28d1f895c6fe 602 /* Check the parameters */
mbed_official 340:28d1f895c6fe 603 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 441:d2c15dda23c1 604
mbed_official 441:d2c15dda23c1 605 /* Perform ADC enable and conversion start if no conversion is on going */
mbed_official 441:d2c15dda23c1 606 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 607 {
mbed_official 441:d2c15dda23c1 608 /* Process locked */
mbed_official 441:d2c15dda23c1 609 __HAL_LOCK(hadc);
mbed_official 441:d2c15dda23c1 610
mbed_official 441:d2c15dda23c1 611 /* Enable the ADC peripheral */
mbed_official 441:d2c15dda23c1 612 /* If low power mode AutoPowerOff is enabled, power-on/off phases are */
mbed_official 441:d2c15dda23c1 613 /* performed automatically by hardware. */
mbed_official 441:d2c15dda23c1 614 if (hadc->Init.LowPowerAutoPowerOff != ENABLE)
mbed_official 441:d2c15dda23c1 615 {
mbed_official 441:d2c15dda23c1 616 tmpHALStatus = ADC_Enable(hadc);
mbed_official 441:d2c15dda23c1 617 }
mbed_official 340:28d1f895c6fe 618
mbed_official 441:d2c15dda23c1 619 /* Start conversion if ADC is effectively enabled */
mbed_official 441:d2c15dda23c1 620 if (tmpHALStatus != HAL_ERROR)
mbed_official 441:d2c15dda23c1 621 {
mbed_official 441:d2c15dda23c1 622 /* State machine update: Change ADC state */
mbed_official 441:d2c15dda23c1 623 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 441:d2c15dda23c1 624
mbed_official 441:d2c15dda23c1 625 /* Set ADC error code to none */
mbed_official 441:d2c15dda23c1 626 __HAL_ADC_CLEAR_ERRORCODE(hadc);
mbed_official 441:d2c15dda23c1 627
mbed_official 441:d2c15dda23c1 628 /* Clear regular group conversion flag and overrun flag */
mbed_official 441:d2c15dda23c1 629 /* (To ensure of no unknown state from potential previous ADC */
mbed_official 441:d2c15dda23c1 630 /* operations) */
mbed_official 441:d2c15dda23c1 631 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
mbed_official 441:d2c15dda23c1 632
mbed_official 441:d2c15dda23c1 633 /* Enable conversion of regular group. */
mbed_official 441:d2c15dda23c1 634 /* If software start has been selected, conversion starts immediately. */
mbed_official 441:d2c15dda23c1 635 /* If external trigger has been selected, conversion will start at next */
mbed_official 441:d2c15dda23c1 636 /* trigger event. */
mbed_official 441:d2c15dda23c1 637 hadc->Instance->CR |= ADC_CR_ADSTART;
mbed_official 441:d2c15dda23c1 638 }
mbed_official 441:d2c15dda23c1 639
mbed_official 441:d2c15dda23c1 640 /* Process unlocked */
mbed_official 441:d2c15dda23c1 641 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 642 }
mbed_official 441:d2c15dda23c1 643 else
mbed_official 441:d2c15dda23c1 644 {
mbed_official 441:d2c15dda23c1 645 tmpHALStatus = HAL_BUSY;
mbed_official 441:d2c15dda23c1 646 }
mbed_official 340:28d1f895c6fe 647
mbed_official 340:28d1f895c6fe 648 /* Return function status */
mbed_official 340:28d1f895c6fe 649 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 650 }
mbed_official 340:28d1f895c6fe 651
mbed_official 340:28d1f895c6fe 652 /**
mbed_official 340:28d1f895c6fe 653 * @brief Stop ADC conversion of regular group, disable ADC peripheral.
mbed_official 340:28d1f895c6fe 654 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 655 * @retval HAL status.
mbed_official 340:28d1f895c6fe 656 */
mbed_official 340:28d1f895c6fe 657 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 658 {
mbed_official 340:28d1f895c6fe 659 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 660
mbed_official 340:28d1f895c6fe 661 /* Check the parameters */
mbed_official 340:28d1f895c6fe 662 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 663
mbed_official 340:28d1f895c6fe 664 /* Process locked */
mbed_official 340:28d1f895c6fe 665 __HAL_LOCK(hadc);
mbed_official 340:28d1f895c6fe 666
mbed_official 340:28d1f895c6fe 667 /* 1. Stop potential conversion on going, on regular group */
mbed_official 340:28d1f895c6fe 668 tmpHALStatus = ADC_ConversionStop(hadc);
mbed_official 340:28d1f895c6fe 669
mbed_official 340:28d1f895c6fe 670 /* Disable ADC peripheral if conversions are effectively stopped */
mbed_official 340:28d1f895c6fe 671 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 672 {
mbed_official 340:28d1f895c6fe 673 /* 2. Disable the ADC peripheral */
mbed_official 340:28d1f895c6fe 674 tmpHALStatus = ADC_Disable(hadc);
mbed_official 340:28d1f895c6fe 675
mbed_official 340:28d1f895c6fe 676 /* Check if ADC is effectively disabled */
mbed_official 340:28d1f895c6fe 677 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 678 {
mbed_official 340:28d1f895c6fe 679 /* Change ADC state */
mbed_official 340:28d1f895c6fe 680 hadc->State = HAL_ADC_STATE_READY;
mbed_official 340:28d1f895c6fe 681 }
mbed_official 340:28d1f895c6fe 682 }
mbed_official 340:28d1f895c6fe 683
mbed_official 340:28d1f895c6fe 684 /* Process unlocked */
mbed_official 340:28d1f895c6fe 685 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 686
mbed_official 340:28d1f895c6fe 687 /* Return function status */
mbed_official 340:28d1f895c6fe 688 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 689 }
mbed_official 340:28d1f895c6fe 690
mbed_official 340:28d1f895c6fe 691 /**
mbed_official 340:28d1f895c6fe 692 * @brief Wait for regular group conversion to be completed.
mbed_official 340:28d1f895c6fe 693 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 694 * @param Timeout: Timeout value in millisecond.
mbed_official 340:28d1f895c6fe 695 * @retval HAL status
mbed_official 340:28d1f895c6fe 696 */
mbed_official 340:28d1f895c6fe 697 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
mbed_official 340:28d1f895c6fe 698 {
mbed_official 340:28d1f895c6fe 699 uint32_t tickstart;
mbed_official 340:28d1f895c6fe 700 uint32_t tmp_Flag_EOC;
mbed_official 340:28d1f895c6fe 701
mbed_official 340:28d1f895c6fe 702 /* Check the parameters */
mbed_official 340:28d1f895c6fe 703 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 704
mbed_official 340:28d1f895c6fe 705 /* If end of conversion selected to end of sequence */
mbed_official 340:28d1f895c6fe 706 if (hadc->Init.EOCSelection == EOC_SEQ_CONV)
mbed_official 340:28d1f895c6fe 707 {
mbed_official 340:28d1f895c6fe 708 tmp_Flag_EOC = ADC_FLAG_EOS;
mbed_official 340:28d1f895c6fe 709 }
mbed_official 340:28d1f895c6fe 710 /* If end of conversion selected to end of each conversion */
mbed_official 340:28d1f895c6fe 711 else /* EOC_SINGLE_CONV */
mbed_official 340:28d1f895c6fe 712 {
mbed_official 340:28d1f895c6fe 713 tmp_Flag_EOC = (ADC_FLAG_EOC | ADC_FLAG_EOS);
mbed_official 340:28d1f895c6fe 714 }
mbed_official 340:28d1f895c6fe 715
mbed_official 340:28d1f895c6fe 716 /* Get timeout */
mbed_official 340:28d1f895c6fe 717 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 718
mbed_official 340:28d1f895c6fe 719 /* Wait until End of Conversion flag is raised */
mbed_official 340:28d1f895c6fe 720 while(HAL_IS_BIT_CLR(hadc->Instance->ISR, tmp_Flag_EOC))
mbed_official 340:28d1f895c6fe 721 {
mbed_official 340:28d1f895c6fe 722 /* Check if timeout is disabled (set to infinite wait) */
mbed_official 340:28d1f895c6fe 723 if(Timeout != HAL_MAX_DELAY)
mbed_official 340:28d1f895c6fe 724 {
mbed_official 340:28d1f895c6fe 725 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
mbed_official 340:28d1f895c6fe 726 {
mbed_official 340:28d1f895c6fe 727 /* Update ADC state machine to timeout */
mbed_official 340:28d1f895c6fe 728 hadc->State = HAL_ADC_STATE_TIMEOUT;
mbed_official 340:28d1f895c6fe 729
mbed_official 340:28d1f895c6fe 730 /* Process unlocked */
mbed_official 340:28d1f895c6fe 731 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 732
mbed_official 340:28d1f895c6fe 733 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 734 }
mbed_official 340:28d1f895c6fe 735 }
mbed_official 340:28d1f895c6fe 736 }
mbed_official 340:28d1f895c6fe 737
mbed_official 340:28d1f895c6fe 738 /* Clear end of conversion flag of regular group if low power feature */
mbed_official 340:28d1f895c6fe 739 /* "LowPowerAutoWait " is disabled, to not interfere with this feature */
mbed_official 340:28d1f895c6fe 740 /* until data register is read using function HAL_ADC_GetValue(). */
mbed_official 340:28d1f895c6fe 741 if (hadc->Init.LowPowerAutoWait == DISABLE)
mbed_official 340:28d1f895c6fe 742 {
mbed_official 340:28d1f895c6fe 743 /* Clear regular group conversion flag */
mbed_official 340:28d1f895c6fe 744 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS));
mbed_official 340:28d1f895c6fe 745 }
mbed_official 340:28d1f895c6fe 746
mbed_official 340:28d1f895c6fe 747 /* Update state machine on conversion status if not in error state */
mbed_official 340:28d1f895c6fe 748 if(hadc->State != HAL_ADC_STATE_ERROR)
mbed_official 340:28d1f895c6fe 749 {
mbed_official 340:28d1f895c6fe 750 /* Change ADC state */
mbed_official 340:28d1f895c6fe 751 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 340:28d1f895c6fe 752 }
mbed_official 340:28d1f895c6fe 753
mbed_official 340:28d1f895c6fe 754 /* Return ADC state */
mbed_official 340:28d1f895c6fe 755 return HAL_OK;
mbed_official 340:28d1f895c6fe 756 }
mbed_official 340:28d1f895c6fe 757
mbed_official 340:28d1f895c6fe 758 /**
mbed_official 340:28d1f895c6fe 759 * @brief Poll for conversion event.
mbed_official 340:28d1f895c6fe 760 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 761 * @param EventType: the ADC event type.
mbed_official 340:28d1f895c6fe 762 * This parameter can be one of the following values:
mbed_official 340:28d1f895c6fe 763 * @arg AWD_EVENT: ADC Analog watchdog event
mbed_official 340:28d1f895c6fe 764 * @arg OVR_EVENT: ADC Overrun event
mbed_official 340:28d1f895c6fe 765 * @param Timeout: Timeout value in millisecond.
mbed_official 340:28d1f895c6fe 766 * @retval HAL status
mbed_official 340:28d1f895c6fe 767 */
mbed_official 340:28d1f895c6fe 768 HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout)
mbed_official 340:28d1f895c6fe 769 {
mbed_official 340:28d1f895c6fe 770 uint32_t tickstart=0;
mbed_official 340:28d1f895c6fe 771
mbed_official 340:28d1f895c6fe 772 /* Check the parameters */
mbed_official 340:28d1f895c6fe 773 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 774 assert_param(IS_ADC_EVENT_TYPE(EventType));
mbed_official 340:28d1f895c6fe 775
mbed_official 340:28d1f895c6fe 776 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 777
mbed_official 340:28d1f895c6fe 778 /* Check selected event flag */
mbed_official 340:28d1f895c6fe 779 while(__HAL_ADC_GET_FLAG(hadc, EventType) == RESET)
mbed_official 340:28d1f895c6fe 780 {
mbed_official 340:28d1f895c6fe 781 /* Check if timeout is disabled (set to infinite wait) */
mbed_official 340:28d1f895c6fe 782 if(Timeout != HAL_MAX_DELAY)
mbed_official 340:28d1f895c6fe 783 {
mbed_official 340:28d1f895c6fe 784 if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
mbed_official 340:28d1f895c6fe 785 {
mbed_official 340:28d1f895c6fe 786 /* Update ADC state machine to timeout */
mbed_official 340:28d1f895c6fe 787 hadc->State = HAL_ADC_STATE_TIMEOUT;
mbed_official 340:28d1f895c6fe 788
mbed_official 340:28d1f895c6fe 789 /* Process unlocked */
mbed_official 340:28d1f895c6fe 790 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 791
mbed_official 340:28d1f895c6fe 792 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 793 }
mbed_official 340:28d1f895c6fe 794 }
mbed_official 340:28d1f895c6fe 795 }
mbed_official 340:28d1f895c6fe 796
mbed_official 340:28d1f895c6fe 797 switch(EventType)
mbed_official 340:28d1f895c6fe 798 {
mbed_official 340:28d1f895c6fe 799 /* Analog watchdog (level out of window) event */
mbed_official 340:28d1f895c6fe 800 case AWD_EVENT:
mbed_official 340:28d1f895c6fe 801 /* Change ADC state */
mbed_official 340:28d1f895c6fe 802 hadc->State = HAL_ADC_STATE_AWD;
mbed_official 340:28d1f895c6fe 803
mbed_official 340:28d1f895c6fe 804 /* Clear ADC analog watchdog flag */
mbed_official 340:28d1f895c6fe 805 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);
mbed_official 340:28d1f895c6fe 806 break;
mbed_official 340:28d1f895c6fe 807
mbed_official 340:28d1f895c6fe 808 /* Overrun event */
mbed_official 340:28d1f895c6fe 809 default: /* Case OVR_EVENT */
mbed_official 340:28d1f895c6fe 810 /* If overrun is set to overwrite previous data, overrun event is not */
mbed_official 340:28d1f895c6fe 811 /* considered as an error. */
mbed_official 340:28d1f895c6fe 812 /* (cf ref manual "Managing conversions without using the DMA and without */
mbed_official 340:28d1f895c6fe 813 /* overrun ") */
mbed_official 340:28d1f895c6fe 814 if (hadc->Init.Overrun == OVR_DATA_PRESERVED)
mbed_official 340:28d1f895c6fe 815 {
mbed_official 340:28d1f895c6fe 816 /* Change ADC state */
mbed_official 340:28d1f895c6fe 817 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 818
mbed_official 340:28d1f895c6fe 819 /* Set ADC error code to overrun */
mbed_official 340:28d1f895c6fe 820 hadc->ErrorCode |= HAL_ADC_ERROR_OVR;
mbed_official 340:28d1f895c6fe 821 }
mbed_official 340:28d1f895c6fe 822
mbed_official 340:28d1f895c6fe 823 /* Clear ADC Overrun flag */
mbed_official 340:28d1f895c6fe 824 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR);
mbed_official 340:28d1f895c6fe 825 break;
mbed_official 340:28d1f895c6fe 826 }
mbed_official 340:28d1f895c6fe 827
mbed_official 340:28d1f895c6fe 828 /* Return ADC state */
mbed_official 340:28d1f895c6fe 829 return HAL_OK;
mbed_official 340:28d1f895c6fe 830 }
mbed_official 340:28d1f895c6fe 831
mbed_official 340:28d1f895c6fe 832 /**
mbed_official 340:28d1f895c6fe 833 * @brief Enables ADC, starts conversion of regular group with interruption.
mbed_official 441:d2c15dda23c1 834 * Interruptions enabled in this function:
mbed_official 441:d2c15dda23c1 835 * - EOC (end of conversion of regular group) or EOS (end of
mbed_official 441:d2c15dda23c1 836 * sequence of regular group) depending on ADC initialization
mbed_official 441:d2c15dda23c1 837 * parameter "EOCSelection"
mbed_official 441:d2c15dda23c1 838 * - overrun (if available)
mbed_official 340:28d1f895c6fe 839 * Each of these interruptions has its dedicated callback function.
mbed_official 340:28d1f895c6fe 840 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 841 * @retval HAL status
mbed_official 340:28d1f895c6fe 842 */
mbed_official 340:28d1f895c6fe 843 HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 844 {
mbed_official 340:28d1f895c6fe 845 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 846
mbed_official 340:28d1f895c6fe 847 /* Check the parameters */
mbed_official 340:28d1f895c6fe 848 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 849
mbed_official 441:d2c15dda23c1 850 /* Perform ADC enable and conversion start if no conversion is on going */
mbed_official 441:d2c15dda23c1 851 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 852 {
mbed_official 441:d2c15dda23c1 853 /* Process locked */
mbed_official 441:d2c15dda23c1 854 __HAL_LOCK(hadc);
mbed_official 441:d2c15dda23c1 855
mbed_official 441:d2c15dda23c1 856 /* Enable the ADC peripheral */
mbed_official 441:d2c15dda23c1 857 /* If low power mode AutoPowerOff is enabled, power-on/off phases are */
mbed_official 441:d2c15dda23c1 858 /* performed automatically by hardware. */
mbed_official 441:d2c15dda23c1 859 if (hadc->Init.LowPowerAutoPowerOff != ENABLE)
mbed_official 340:28d1f895c6fe 860 {
mbed_official 441:d2c15dda23c1 861 tmpHALStatus = ADC_Enable(hadc);
mbed_official 340:28d1f895c6fe 862 }
mbed_official 340:28d1f895c6fe 863
mbed_official 441:d2c15dda23c1 864 /* Start conversion if ADC is effectively enabled */
mbed_official 441:d2c15dda23c1 865 if (tmpHALStatus != HAL_ERROR)
mbed_official 441:d2c15dda23c1 866 {
mbed_official 441:d2c15dda23c1 867 /* State machine update: Change ADC state */
mbed_official 441:d2c15dda23c1 868 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 441:d2c15dda23c1 869
mbed_official 441:d2c15dda23c1 870 /* Set ADC error code to none */
mbed_official 441:d2c15dda23c1 871 __HAL_ADC_CLEAR_ERRORCODE(hadc);
mbed_official 441:d2c15dda23c1 872
mbed_official 441:d2c15dda23c1 873 /* Clear regular group conversion flag and overrun flag */
mbed_official 441:d2c15dda23c1 874 /* (To ensure of no unknown state from potential previous ADC */
mbed_official 441:d2c15dda23c1 875 /* operations) */
mbed_official 441:d2c15dda23c1 876 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
mbed_official 441:d2c15dda23c1 877
mbed_official 441:d2c15dda23c1 878 /* Enable ADC end of conversion interrupt */
mbed_official 441:d2c15dda23c1 879 /* Enable ADC overrun interrupt */
mbed_official 441:d2c15dda23c1 880 switch(hadc->Init.EOCSelection)
mbed_official 441:d2c15dda23c1 881 {
mbed_official 441:d2c15dda23c1 882 case EOC_SEQ_CONV:
mbed_official 441:d2c15dda23c1 883 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);
mbed_official 441:d2c15dda23c1 884 __HAL_ADC_ENABLE_IT(hadc, (ADC_IT_EOS | ADC_IT_OVR));
mbed_official 441:d2c15dda23c1 885 break;
mbed_official 441:d2c15dda23c1 886 /* case EOC_SINGLE_CONV */
mbed_official 441:d2c15dda23c1 887 default:
mbed_official 441:d2c15dda23c1 888 __HAL_ADC_ENABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR));
mbed_official 441:d2c15dda23c1 889 break;
mbed_official 441:d2c15dda23c1 890 }
mbed_official 441:d2c15dda23c1 891
mbed_official 441:d2c15dda23c1 892 /* Enable conversion of regular group. */
mbed_official 441:d2c15dda23c1 893 /* If software start has been selected, conversion starts immediately. */
mbed_official 441:d2c15dda23c1 894 /* If external trigger has been selected, conversion will start at next */
mbed_official 441:d2c15dda23c1 895 /* trigger event. */
mbed_official 441:d2c15dda23c1 896 hadc->Instance->CR |= ADC_CR_ADSTART;
mbed_official 441:d2c15dda23c1 897 }
mbed_official 441:d2c15dda23c1 898
mbed_official 441:d2c15dda23c1 899 /* Process unlocked */
mbed_official 441:d2c15dda23c1 900 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 901 }
mbed_official 441:d2c15dda23c1 902 else
mbed_official 441:d2c15dda23c1 903 {
mbed_official 441:d2c15dda23c1 904 tmpHALStatus = HAL_BUSY;
mbed_official 441:d2c15dda23c1 905 }
mbed_official 441:d2c15dda23c1 906
mbed_official 340:28d1f895c6fe 907 /* Return function status */
mbed_official 340:28d1f895c6fe 908 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 909 }
mbed_official 340:28d1f895c6fe 910
mbed_official 340:28d1f895c6fe 911
mbed_official 340:28d1f895c6fe 912 /**
mbed_official 340:28d1f895c6fe 913 * @brief Stop ADC conversion of regular group, disable interruption of
mbed_official 340:28d1f895c6fe 914 * end-of-conversion, disable ADC peripheral.
mbed_official 340:28d1f895c6fe 915 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 916 * @retval HAL status.
mbed_official 340:28d1f895c6fe 917 */
mbed_official 340:28d1f895c6fe 918 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 919 {
mbed_official 340:28d1f895c6fe 920 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 921
mbed_official 340:28d1f895c6fe 922 /* Check the parameters */
mbed_official 340:28d1f895c6fe 923 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 924
mbed_official 340:28d1f895c6fe 925 /* Process locked */
mbed_official 340:28d1f895c6fe 926 __HAL_LOCK(hadc);
mbed_official 340:28d1f895c6fe 927
mbed_official 340:28d1f895c6fe 928 /* 1. Stop potential conversion on going, on regular group */
mbed_official 340:28d1f895c6fe 929 tmpHALStatus = ADC_ConversionStop(hadc);
mbed_official 340:28d1f895c6fe 930
mbed_official 340:28d1f895c6fe 931 /* Disable ADC peripheral if conversions are effectively stopped */
mbed_official 340:28d1f895c6fe 932 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 933 {
mbed_official 340:28d1f895c6fe 934 /* Disable ADC end of conversion interrupt for regular group */
mbed_official 340:28d1f895c6fe 935 /* Disable ADC overrun interrupt */
mbed_official 340:28d1f895c6fe 936 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR));
mbed_official 340:28d1f895c6fe 937
mbed_official 340:28d1f895c6fe 938 /* 2. Disable the ADC peripheral */
mbed_official 340:28d1f895c6fe 939 tmpHALStatus = ADC_Disable(hadc);
mbed_official 340:28d1f895c6fe 940
mbed_official 340:28d1f895c6fe 941 /* Check if ADC is effectively disabled */
mbed_official 340:28d1f895c6fe 942 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 943 {
mbed_official 340:28d1f895c6fe 944 /* Change ADC state */
mbed_official 340:28d1f895c6fe 945 hadc->State = HAL_ADC_STATE_READY;
mbed_official 340:28d1f895c6fe 946 }
mbed_official 340:28d1f895c6fe 947 }
mbed_official 340:28d1f895c6fe 948
mbed_official 340:28d1f895c6fe 949 /* Process unlocked */
mbed_official 340:28d1f895c6fe 950 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 951
mbed_official 340:28d1f895c6fe 952 /* Return function status */
mbed_official 340:28d1f895c6fe 953 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 954 }
mbed_official 340:28d1f895c6fe 955
mbed_official 340:28d1f895c6fe 956 /**
mbed_official 340:28d1f895c6fe 957 * @brief Enables ADC, starts conversion of regular group and transfers result
mbed_official 340:28d1f895c6fe 958 * through DMA.
mbed_official 340:28d1f895c6fe 959 * Interruptions enabled in this function:
mbed_official 441:d2c15dda23c1 960 * - DMA transfer complete
mbed_official 441:d2c15dda23c1 961 * - DMA half transfer
mbed_official 441:d2c15dda23c1 962 * - overrun
mbed_official 340:28d1f895c6fe 963 * Each of these interruptions has its dedicated callback function.
mbed_official 340:28d1f895c6fe 964 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 965 * @param pData: The destination Buffer address.
mbed_official 340:28d1f895c6fe 966 * @param Length: The length of data to be transferred from ADC peripheral to memory.
mbed_official 340:28d1f895c6fe 967 * @retval None
mbed_official 340:28d1f895c6fe 968 */
mbed_official 340:28d1f895c6fe 969 HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
mbed_official 340:28d1f895c6fe 970 {
mbed_official 340:28d1f895c6fe 971 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 972
mbed_official 340:28d1f895c6fe 973 /* Check the parameters */
mbed_official 340:28d1f895c6fe 974 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 441:d2c15dda23c1 975
mbed_official 441:d2c15dda23c1 976 /* Perform ADC enable and conversion start if no conversion is on going */
mbed_official 441:d2c15dda23c1 977 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 978 {
mbed_official 441:d2c15dda23c1 979 /* Process locked */
mbed_official 441:d2c15dda23c1 980 __HAL_LOCK(hadc);
mbed_official 441:d2c15dda23c1 981
mbed_official 441:d2c15dda23c1 982 /* Enable the ADC peripheral */
mbed_official 441:d2c15dda23c1 983 /* If low power mode AutoPowerOff is enabled, power-on/off phases are */
mbed_official 441:d2c15dda23c1 984 /* performed automatically by hardware. */
mbed_official 441:d2c15dda23c1 985 if (hadc->Init.LowPowerAutoPowerOff != ENABLE)
mbed_official 441:d2c15dda23c1 986 {
mbed_official 441:d2c15dda23c1 987 tmpHALStatus = ADC_Enable(hadc);
mbed_official 441:d2c15dda23c1 988 }
mbed_official 340:28d1f895c6fe 989
mbed_official 441:d2c15dda23c1 990 /* Start conversion if ADC is effectively enabled */
mbed_official 441:d2c15dda23c1 991 if (tmpHALStatus != HAL_ERROR)
mbed_official 441:d2c15dda23c1 992 {
mbed_official 441:d2c15dda23c1 993 /* State machine update: Change ADC state */
mbed_official 441:d2c15dda23c1 994 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 441:d2c15dda23c1 995
mbed_official 441:d2c15dda23c1 996 /* Set ADC error code to none */
mbed_official 441:d2c15dda23c1 997 __HAL_ADC_CLEAR_ERRORCODE(hadc);
mbed_official 340:28d1f895c6fe 998
mbed_official 441:d2c15dda23c1 999
mbed_official 441:d2c15dda23c1 1000 /* Set the DMA transfer complete callback */
mbed_official 441:d2c15dda23c1 1001 hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
mbed_official 441:d2c15dda23c1 1002
mbed_official 441:d2c15dda23c1 1003 /* Set the DMA half transfer complete callback */
mbed_official 441:d2c15dda23c1 1004 hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
mbed_official 441:d2c15dda23c1 1005
mbed_official 441:d2c15dda23c1 1006 /* Set the DMA error callback */
mbed_official 441:d2c15dda23c1 1007 hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
mbed_official 340:28d1f895c6fe 1008
mbed_official 441:d2c15dda23c1 1009
mbed_official 441:d2c15dda23c1 1010 /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC */
mbed_official 441:d2c15dda23c1 1011 /* start (in case of SW start): */
mbed_official 441:d2c15dda23c1 1012
mbed_official 441:d2c15dda23c1 1013 /* Clear regular group conversion flag and overrun flag */
mbed_official 441:d2c15dda23c1 1014 /* (To ensure of no unknown state from potential previous ADC */
mbed_official 441:d2c15dda23c1 1015 /* operations) */
mbed_official 441:d2c15dda23c1 1016 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
mbed_official 441:d2c15dda23c1 1017
mbed_official 441:d2c15dda23c1 1018 /* Enable ADC overrun interrupt */
mbed_official 441:d2c15dda23c1 1019 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
mbed_official 441:d2c15dda23c1 1020
mbed_official 441:d2c15dda23c1 1021 /* Enable ADC DMA mode */
mbed_official 441:d2c15dda23c1 1022 hadc->Instance->CFGR1 |= ADC_CFGR1_DMAEN;
mbed_official 441:d2c15dda23c1 1023
mbed_official 441:d2c15dda23c1 1024 /* Start the DMA channel */
mbed_official 441:d2c15dda23c1 1025 HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
mbed_official 441:d2c15dda23c1 1026
mbed_official 441:d2c15dda23c1 1027 /* Enable conversion of regular group. */
mbed_official 441:d2c15dda23c1 1028 /* If software start has been selected, conversion starts immediately. */
mbed_official 441:d2c15dda23c1 1029 /* If external trigger has been selected, conversion will start at next */
mbed_official 441:d2c15dda23c1 1030 /* trigger event. */
mbed_official 441:d2c15dda23c1 1031 hadc->Instance->CR |= ADC_CR_ADSTART;
mbed_official 441:d2c15dda23c1 1032 }
mbed_official 340:28d1f895c6fe 1033
mbed_official 441:d2c15dda23c1 1034 /* Process unlocked */
mbed_official 441:d2c15dda23c1 1035 __HAL_UNLOCK(hadc);
mbed_official 441:d2c15dda23c1 1036 }
mbed_official 441:d2c15dda23c1 1037 else
mbed_official 441:d2c15dda23c1 1038 {
mbed_official 441:d2c15dda23c1 1039 tmpHALStatus = HAL_BUSY;
mbed_official 441:d2c15dda23c1 1040 }
mbed_official 340:28d1f895c6fe 1041
mbed_official 340:28d1f895c6fe 1042 /* Return function status */
mbed_official 340:28d1f895c6fe 1043 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 1044 }
mbed_official 340:28d1f895c6fe 1045
mbed_official 340:28d1f895c6fe 1046 /**
mbed_official 340:28d1f895c6fe 1047 * @brief Stop ADC conversion of regular group, disable ADC DMA transfer, disable
mbed_official 340:28d1f895c6fe 1048 * ADC peripheral.
mbed_official 340:28d1f895c6fe 1049 * Each of these interruptions has its dedicated callback function.
mbed_official 340:28d1f895c6fe 1050 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1051 * @retval HAL status.
mbed_official 340:28d1f895c6fe 1052 */
mbed_official 340:28d1f895c6fe 1053 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1054 {
mbed_official 340:28d1f895c6fe 1055 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 1056
mbed_official 340:28d1f895c6fe 1057 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1058 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1059
mbed_official 340:28d1f895c6fe 1060 /* Process locked */
mbed_official 340:28d1f895c6fe 1061 __HAL_LOCK(hadc);
mbed_official 340:28d1f895c6fe 1062
mbed_official 340:28d1f895c6fe 1063 /* 1. Stop potential conversion on going, on regular group */
mbed_official 340:28d1f895c6fe 1064 tmpHALStatus = ADC_ConversionStop(hadc);
mbed_official 340:28d1f895c6fe 1065
mbed_official 340:28d1f895c6fe 1066 /* Disable ADC peripheral if conversions are effectively stopped */
mbed_official 340:28d1f895c6fe 1067 if (tmpHALStatus != HAL_ERROR)
mbed_official 340:28d1f895c6fe 1068 {
mbed_official 340:28d1f895c6fe 1069 /* Disable ADC DMA (ADC DMA configuration ADC_CFGR_DMACFG is kept) */
mbed_official 340:28d1f895c6fe 1070 hadc->Instance->CFGR1 &= ~ADC_CFGR1_DMAEN;
mbed_official 340:28d1f895c6fe 1071
mbed_official 340:28d1f895c6fe 1072 /* Disable the DMA channel (in case of DMA in circular mode or stop while */
mbed_official 340:28d1f895c6fe 1073 /* while DMA transfer is on going) */
mbed_official 340:28d1f895c6fe 1074 tmpHALStatus = HAL_DMA_Abort(hadc->DMA_Handle);
mbed_official 340:28d1f895c6fe 1075
mbed_official 340:28d1f895c6fe 1076 /* Check if DMA channel effectively disabled */
mbed_official 340:28d1f895c6fe 1077 if (tmpHALStatus != HAL_OK)
mbed_official 340:28d1f895c6fe 1078 {
mbed_official 340:28d1f895c6fe 1079 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1080 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1081 }
mbed_official 340:28d1f895c6fe 1082
mbed_official 340:28d1f895c6fe 1083 /* Disable ADC overrun interrupt */
mbed_official 340:28d1f895c6fe 1084 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
mbed_official 340:28d1f895c6fe 1085
mbed_official 340:28d1f895c6fe 1086 /* 2. Disable the ADC peripheral */
mbed_official 340:28d1f895c6fe 1087 /* Update "tmpHALStatus" only if DMA channel disabling passed, to keep in */
mbed_official 340:28d1f895c6fe 1088 /* memory a potential failing status. */
mbed_official 340:28d1f895c6fe 1089 if (tmpHALStatus == HAL_OK)
mbed_official 340:28d1f895c6fe 1090 {
mbed_official 340:28d1f895c6fe 1091 tmpHALStatus = ADC_Disable(hadc);
mbed_official 340:28d1f895c6fe 1092 }
mbed_official 340:28d1f895c6fe 1093 else
mbed_official 340:28d1f895c6fe 1094 {
mbed_official 340:28d1f895c6fe 1095 ADC_Disable(hadc);
mbed_official 340:28d1f895c6fe 1096 }
mbed_official 340:28d1f895c6fe 1097
mbed_official 340:28d1f895c6fe 1098 /* Check if ADC is effectively disabled */
mbed_official 340:28d1f895c6fe 1099 if (tmpHALStatus == HAL_OK)
mbed_official 340:28d1f895c6fe 1100 {
mbed_official 340:28d1f895c6fe 1101 /* Change ADC state */
mbed_official 340:28d1f895c6fe 1102 hadc->State = HAL_ADC_STATE_READY;
mbed_official 340:28d1f895c6fe 1103 }
mbed_official 340:28d1f895c6fe 1104
mbed_official 340:28d1f895c6fe 1105 }
mbed_official 340:28d1f895c6fe 1106
mbed_official 340:28d1f895c6fe 1107 /* Process unlocked */
mbed_official 340:28d1f895c6fe 1108 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 1109
mbed_official 340:28d1f895c6fe 1110 /* Return function status */
mbed_official 340:28d1f895c6fe 1111 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 1112 }
mbed_official 340:28d1f895c6fe 1113
mbed_official 340:28d1f895c6fe 1114 /**
mbed_official 340:28d1f895c6fe 1115 * @brief Get ADC regular group conversion result.
mbed_official 441:d2c15dda23c1 1116 * @note Reading DR register automatically clears EOC (end of conversion of
mbed_official 441:d2c15dda23c1 1117 * regular group) flag.
mbed_official 441:d2c15dda23c1 1118 * Additionally, this functions clears EOS (end of sequence of
mbed_official 441:d2c15dda23c1 1119 * regular group) flag, in case of the end of the sequence is reached.
mbed_official 340:28d1f895c6fe 1120 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1121 * @retval Converted value
mbed_official 340:28d1f895c6fe 1122 */
mbed_official 340:28d1f895c6fe 1123 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1124 {
mbed_official 340:28d1f895c6fe 1125 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1126 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1127
mbed_official 441:d2c15dda23c1 1128 /* @Note: EOC flag is not cleared here by software because automatically */
mbed_official 441:d2c15dda23c1 1129 /* cleared by hardware when reading register DR. */
mbed_official 340:28d1f895c6fe 1130
mbed_official 441:d2c15dda23c1 1131 /* Clear regular group end of sequence flag */
mbed_official 441:d2c15dda23c1 1132 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOS);
mbed_official 340:28d1f895c6fe 1133
mbed_official 340:28d1f895c6fe 1134 /* Return ADC converted value */
mbed_official 340:28d1f895c6fe 1135 return hadc->Instance->DR;
mbed_official 340:28d1f895c6fe 1136 }
mbed_official 340:28d1f895c6fe 1137
mbed_official 340:28d1f895c6fe 1138 /**
mbed_official 340:28d1f895c6fe 1139 * @brief DMA transfer complete callback.
mbed_official 340:28d1f895c6fe 1140 * @param hdma: pointer to DMA handle.
mbed_official 340:28d1f895c6fe 1141 * @retval None
mbed_official 340:28d1f895c6fe 1142 */
mbed_official 340:28d1f895c6fe 1143 static void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 340:28d1f895c6fe 1144 {
mbed_official 340:28d1f895c6fe 1145 /* Retrieve ADC handle corresponding to current DMA handle */
mbed_official 340:28d1f895c6fe 1146 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 340:28d1f895c6fe 1147
mbed_official 340:28d1f895c6fe 1148 /* Update state machine on conversion status if not in error state */
mbed_official 340:28d1f895c6fe 1149 if(hadc->State != HAL_ADC_STATE_ERROR)
mbed_official 340:28d1f895c6fe 1150 {
mbed_official 340:28d1f895c6fe 1151 /* Change ADC state */
mbed_official 340:28d1f895c6fe 1152 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 340:28d1f895c6fe 1153 }
mbed_official 340:28d1f895c6fe 1154
mbed_official 340:28d1f895c6fe 1155 /* Conversion complete callback */
mbed_official 340:28d1f895c6fe 1156 HAL_ADC_ConvCpltCallback(hadc);
mbed_official 340:28d1f895c6fe 1157 }
mbed_official 340:28d1f895c6fe 1158
mbed_official 340:28d1f895c6fe 1159 /**
mbed_official 340:28d1f895c6fe 1160 * @brief DMA half transfer complete callback.
mbed_official 340:28d1f895c6fe 1161 * @param hdma: pointer to DMA handle.
mbed_official 340:28d1f895c6fe 1162 * @retval None
mbed_official 340:28d1f895c6fe 1163 */
mbed_official 340:28d1f895c6fe 1164 static void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 340:28d1f895c6fe 1165 {
mbed_official 340:28d1f895c6fe 1166 /* Retrieve ADC handle corresponding to current DMA handle */
mbed_official 340:28d1f895c6fe 1167 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 340:28d1f895c6fe 1168
mbed_official 340:28d1f895c6fe 1169 /* Half conversion callback */
mbed_official 340:28d1f895c6fe 1170 HAL_ADC_ConvHalfCpltCallback(hadc);
mbed_official 340:28d1f895c6fe 1171 }
mbed_official 340:28d1f895c6fe 1172
mbed_official 340:28d1f895c6fe 1173 /**
mbed_official 340:28d1f895c6fe 1174 * @brief DMA error callback
mbed_official 340:28d1f895c6fe 1175 * @param hdma: pointer to DMA handle.
mbed_official 340:28d1f895c6fe 1176 * @retval None
mbed_official 340:28d1f895c6fe 1177 */
mbed_official 340:28d1f895c6fe 1178 static void ADC_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 340:28d1f895c6fe 1179 {
mbed_official 340:28d1f895c6fe 1180 /* Retrieve ADC handle corresponding to current DMA handle */
mbed_official 340:28d1f895c6fe 1181 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 340:28d1f895c6fe 1182
mbed_official 340:28d1f895c6fe 1183 /* Change ADC state */
mbed_official 340:28d1f895c6fe 1184 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1185
mbed_official 340:28d1f895c6fe 1186 /* Set ADC error code to DMA error */
mbed_official 340:28d1f895c6fe 1187 hadc->ErrorCode |= HAL_ADC_ERROR_DMA;
mbed_official 340:28d1f895c6fe 1188
mbed_official 340:28d1f895c6fe 1189 /* Error callback */
mbed_official 340:28d1f895c6fe 1190 HAL_ADC_ErrorCallback(hadc);
mbed_official 340:28d1f895c6fe 1191 }
mbed_official 340:28d1f895c6fe 1192
mbed_official 340:28d1f895c6fe 1193 /**
mbed_official 340:28d1f895c6fe 1194 * @brief Handles ADC interrupt request.
mbed_official 340:28d1f895c6fe 1195 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1196 * @retval None
mbed_official 340:28d1f895c6fe 1197 */
mbed_official 340:28d1f895c6fe 1198 void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1199 {
mbed_official 340:28d1f895c6fe 1200 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1201 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1202 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 340:28d1f895c6fe 1203 assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
mbed_official 340:28d1f895c6fe 1204
mbed_official 340:28d1f895c6fe 1205 /* ========== Check End of Conversion flag for regular group ========== */
mbed_official 340:28d1f895c6fe 1206 if( (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC) && __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOC)) ||
mbed_official 340:28d1f895c6fe 1207 (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS) && __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOS)) )
mbed_official 340:28d1f895c6fe 1208 {
mbed_official 340:28d1f895c6fe 1209 /* Update state machine on conversion status if not in error state */
mbed_official 340:28d1f895c6fe 1210 if(hadc->State != HAL_ADC_STATE_ERROR)
mbed_official 340:28d1f895c6fe 1211 {
mbed_official 340:28d1f895c6fe 1212 /* Change ADC state */
mbed_official 340:28d1f895c6fe 1213 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 340:28d1f895c6fe 1214 }
mbed_official 340:28d1f895c6fe 1215
mbed_official 340:28d1f895c6fe 1216 /* Disable interruption if no further conversion upcoming by regular */
mbed_official 340:28d1f895c6fe 1217 /* external trigger or by continuous mode, */
mbed_official 340:28d1f895c6fe 1218 /* and if scan sequence if completed. */
mbed_official 340:28d1f895c6fe 1219 if(__HAL_ADC_IS_SOFTWARE_START_REGULAR(hadc) &&
mbed_official 340:28d1f895c6fe 1220 (hadc->Init.ContinuousConvMode == DISABLE) )
mbed_official 340:28d1f895c6fe 1221 {
mbed_official 340:28d1f895c6fe 1222 /* If End of Sequence is reached, disable interrupts */
mbed_official 340:28d1f895c6fe 1223 if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS) )
mbed_official 340:28d1f895c6fe 1224 {
mbed_official 340:28d1f895c6fe 1225 /* Allowed to modify bits ADC_IT_EOC/ADC_IT_EOS only if bit */
mbed_official 340:28d1f895c6fe 1226 /* ADSTART==0 (no conversion on going) */
mbed_official 340:28d1f895c6fe 1227 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 1228 {
mbed_official 340:28d1f895c6fe 1229 /* Disable ADC end of sequence conversion interrupt */
mbed_official 441:d2c15dda23c1 1230 /* @Note: Overrun interrupt was enabled with EOC interrupt in */
mbed_official 340:28d1f895c6fe 1231 /* HAL_Start_IT(), but is not disabled here because can be used */
mbed_official 340:28d1f895c6fe 1232 /* by overrun IRQ process below. */
mbed_official 340:28d1f895c6fe 1233 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC | ADC_IT_EOS);
mbed_official 340:28d1f895c6fe 1234 }
mbed_official 340:28d1f895c6fe 1235 else
mbed_official 340:28d1f895c6fe 1236 {
mbed_official 340:28d1f895c6fe 1237 /* Change ADC state to error state */
mbed_official 340:28d1f895c6fe 1238 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1239
mbed_official 340:28d1f895c6fe 1240 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1241 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1242 }
mbed_official 340:28d1f895c6fe 1243 }
mbed_official 340:28d1f895c6fe 1244 }
mbed_official 340:28d1f895c6fe 1245
mbed_official 340:28d1f895c6fe 1246 /* Conversion complete callback */
mbed_official 441:d2c15dda23c1 1247 /* @Note: into callback, to determine if conversion has been triggered */
mbed_official 340:28d1f895c6fe 1248 /* from EOC or EOS, possibility to use: */
mbed_official 340:28d1f895c6fe 1249 /* " if( __HAL_ADC_GET_FLAG(&hadc, ADC_FLAG_EOS)) " */
mbed_official 340:28d1f895c6fe 1250 HAL_ADC_ConvCpltCallback(hadc);
mbed_official 340:28d1f895c6fe 1251
mbed_official 340:28d1f895c6fe 1252
mbed_official 340:28d1f895c6fe 1253 /* Clear regular group conversion flag */
mbed_official 441:d2c15dda23c1 1254 /* @Note: in case of overrun set to OVR_DATA_PRESERVED, end of conversion */
mbed_official 340:28d1f895c6fe 1255 /* flags clear induces the release of the preserved data. */
mbed_official 340:28d1f895c6fe 1256 /* Therefore, if the preserved data value is needed, it must be */
mbed_official 340:28d1f895c6fe 1257 /* read preliminarily into HAL_ADC_ConvCpltCallback(). */
mbed_official 340:28d1f895c6fe 1258 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS) );
mbed_official 340:28d1f895c6fe 1259 }
mbed_official 340:28d1f895c6fe 1260
mbed_official 340:28d1f895c6fe 1261 /* ========== Check Analog watchdog flags ========== */
mbed_official 340:28d1f895c6fe 1262 if(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_AWD) && __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_AWD))
mbed_official 340:28d1f895c6fe 1263 {
mbed_official 340:28d1f895c6fe 1264 /* Change ADC state */
mbed_official 340:28d1f895c6fe 1265 hadc->State = HAL_ADC_STATE_AWD;
mbed_official 340:28d1f895c6fe 1266
mbed_official 441:d2c15dda23c1 1267 /* Level out of window callback */
mbed_official 441:d2c15dda23c1 1268 HAL_ADC_LevelOutOfWindowCallback(hadc);
mbed_official 441:d2c15dda23c1 1269
mbed_official 340:28d1f895c6fe 1270 /* Clear ADC Analog watchdog flag */
mbed_official 340:28d1f895c6fe 1271 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);
mbed_official 441:d2c15dda23c1 1272
mbed_official 340:28d1f895c6fe 1273 }
mbed_official 340:28d1f895c6fe 1274
mbed_official 340:28d1f895c6fe 1275
mbed_official 340:28d1f895c6fe 1276 /* ========== Check Overrun flag ========== */
mbed_official 340:28d1f895c6fe 1277 if(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_OVR) && __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_OVR))
mbed_official 340:28d1f895c6fe 1278 {
mbed_official 340:28d1f895c6fe 1279 /* If overrun is set to overwrite previous data (default setting), */
mbed_official 340:28d1f895c6fe 1280 /* overrun event is not considered as an error. */
mbed_official 340:28d1f895c6fe 1281 /* (cf ref manual "Managing conversions without using the DMA and without */
mbed_official 340:28d1f895c6fe 1282 /* overrun ") */
mbed_official 340:28d1f895c6fe 1283 /* Exception for usage with DMA overrun event always considered as an */
mbed_official 340:28d1f895c6fe 1284 /* error. */
mbed_official 340:28d1f895c6fe 1285 if ((hadc->Init.Overrun == OVR_DATA_PRESERVED) ||
mbed_official 340:28d1f895c6fe 1286 HAL_IS_BIT_SET(hadc->Instance->CFGR1, ADC_CFGR1_DMAEN) )
mbed_official 340:28d1f895c6fe 1287 {
mbed_official 340:28d1f895c6fe 1288 /* Change ADC state to error state */
mbed_official 340:28d1f895c6fe 1289 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1290
mbed_official 340:28d1f895c6fe 1291 /* Set ADC error code to overrun */
mbed_official 340:28d1f895c6fe 1292 hadc->ErrorCode |= HAL_ADC_ERROR_OVR;
mbed_official 340:28d1f895c6fe 1293
mbed_official 340:28d1f895c6fe 1294 /* Error callback */
mbed_official 340:28d1f895c6fe 1295 HAL_ADC_ErrorCallback(hadc);
mbed_official 340:28d1f895c6fe 1296 }
mbed_official 340:28d1f895c6fe 1297
mbed_official 340:28d1f895c6fe 1298 /* Clear the Overrun flag */
mbed_official 340:28d1f895c6fe 1299 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR);
mbed_official 340:28d1f895c6fe 1300 }
mbed_official 340:28d1f895c6fe 1301
mbed_official 340:28d1f895c6fe 1302 }
mbed_official 340:28d1f895c6fe 1303
mbed_official 340:28d1f895c6fe 1304
mbed_official 340:28d1f895c6fe 1305 /**
mbed_official 340:28d1f895c6fe 1306 * @brief Conversion complete callback in non blocking mode
mbed_official 340:28d1f895c6fe 1307 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1308 * @retval None
mbed_official 340:28d1f895c6fe 1309 */
mbed_official 340:28d1f895c6fe 1310 __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1311 {
mbed_official 340:28d1f895c6fe 1312 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 1313 function HAL_ADC_ConvCpltCallback must be implemented in the user file.
mbed_official 340:28d1f895c6fe 1314 */
mbed_official 340:28d1f895c6fe 1315 }
mbed_official 340:28d1f895c6fe 1316
mbed_official 340:28d1f895c6fe 1317 /**
mbed_official 340:28d1f895c6fe 1318 * @brief Conversion DMA half-transfer callback in non blocking mode
mbed_official 340:28d1f895c6fe 1319 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1320 * @retval None
mbed_official 340:28d1f895c6fe 1321 */
mbed_official 340:28d1f895c6fe 1322 __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1323 {
mbed_official 340:28d1f895c6fe 1324 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 1325 function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
mbed_official 340:28d1f895c6fe 1326 */
mbed_official 340:28d1f895c6fe 1327 }
mbed_official 340:28d1f895c6fe 1328
mbed_official 340:28d1f895c6fe 1329 /**
mbed_official 340:28d1f895c6fe 1330 * @brief Analog watchdog callback in non blocking mode.
mbed_official 340:28d1f895c6fe 1331 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1332 * @retval None
mbed_official 340:28d1f895c6fe 1333 */
mbed_official 340:28d1f895c6fe 1334 __weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1335 {
mbed_official 340:28d1f895c6fe 1336 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 1337 function HAL_ADC_LevelOoutOfWindowCallback must be implemented in the user file.
mbed_official 340:28d1f895c6fe 1338 */
mbed_official 340:28d1f895c6fe 1339 }
mbed_official 340:28d1f895c6fe 1340
mbed_official 340:28d1f895c6fe 1341 /**
mbed_official 340:28d1f895c6fe 1342 * @brief ADC error callback in non blocking mode
mbed_official 340:28d1f895c6fe 1343 * (ADC conversion with interruption or transfer by DMA)
mbed_official 340:28d1f895c6fe 1344 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1345 * @retval None
mbed_official 340:28d1f895c6fe 1346 */
mbed_official 340:28d1f895c6fe 1347 __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
mbed_official 340:28d1f895c6fe 1348 {
mbed_official 340:28d1f895c6fe 1349 /* NOTE : This function should not be modified. When the callback is needed,
mbed_official 340:28d1f895c6fe 1350 function HAL_ADC_ErrorCallback must be implemented in the user file.
mbed_official 340:28d1f895c6fe 1351 */
mbed_official 340:28d1f895c6fe 1352 }
mbed_official 340:28d1f895c6fe 1353
mbed_official 340:28d1f895c6fe 1354
mbed_official 340:28d1f895c6fe 1355 /**
mbed_official 340:28d1f895c6fe 1356 * @}
mbed_official 340:28d1f895c6fe 1357 */
mbed_official 340:28d1f895c6fe 1358
mbed_official 340:28d1f895c6fe 1359 /** @defgroup ADC_Exported_Functions_Group3 Peripheral Control functions
mbed_official 340:28d1f895c6fe 1360 * @brief Peripheral Control functions
mbed_official 340:28d1f895c6fe 1361 *
mbed_official 340:28d1f895c6fe 1362 @verbatim
mbed_official 340:28d1f895c6fe 1363 ===============================================================================
mbed_official 340:28d1f895c6fe 1364 ##### Peripheral Control functions #####
mbed_official 340:28d1f895c6fe 1365 ===============================================================================
mbed_official 340:28d1f895c6fe 1366 [..] This section provides functions allowing to:
mbed_official 340:28d1f895c6fe 1367 (+) Configure channels on regular group
mbed_official 340:28d1f895c6fe 1368 (+) Configure the analog watchdog
mbed_official 340:28d1f895c6fe 1369
mbed_official 340:28d1f895c6fe 1370 @endverbatim
mbed_official 340:28d1f895c6fe 1371 * @{
mbed_official 340:28d1f895c6fe 1372 */
mbed_official 340:28d1f895c6fe 1373
mbed_official 340:28d1f895c6fe 1374 /**
mbed_official 340:28d1f895c6fe 1375 * @brief Configures the the selected channel to be linked to the regular
mbed_official 340:28d1f895c6fe 1376 * group.
mbed_official 340:28d1f895c6fe 1377 * @note In case of usage of internal measurement channels:
mbed_official 340:28d1f895c6fe 1378 * VrefInt/Vbat/TempSensor.
mbed_official 340:28d1f895c6fe 1379 * Sampling time constraints must be respected (sampling time can be
mbed_official 340:28d1f895c6fe 1380 * adjusted in function of ADC clock frequency and sampling time
mbed_official 340:28d1f895c6fe 1381 * setting).
mbed_official 340:28d1f895c6fe 1382 * Refer to device datasheet for timings values, parameters TS_vrefint,
mbed_official 340:28d1f895c6fe 1383 * TS_vbat, TS_temp (values rough order: 5us to 17us).
mbed_official 340:28d1f895c6fe 1384 * These internal paths can be be disabled using function
mbed_official 340:28d1f895c6fe 1385 * HAL_ADC_DeInit().
mbed_official 340:28d1f895c6fe 1386 * @note Possibility to update parameters on the fly:
mbed_official 340:28d1f895c6fe 1387 * This function initializes channel into regular group, following
mbed_official 340:28d1f895c6fe 1388 * calls to this function can be used to reconfigure some parameters
mbed_official 340:28d1f895c6fe 1389 * of structure "ADC_ChannelConfTypeDef" on the fly, without reseting
mbed_official 340:28d1f895c6fe 1390 * the ADC.
mbed_official 340:28d1f895c6fe 1391 * The setting of these parameters is conditioned to ADC state.
mbed_official 340:28d1f895c6fe 1392 * For parameters constraints, see comments of structure
mbed_official 340:28d1f895c6fe 1393 * "ADC_ChannelConfTypeDef".
mbed_official 340:28d1f895c6fe 1394 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1395 * @param sConfig: Structure of ADC channel for regular group.
mbed_official 340:28d1f895c6fe 1396 * @retval HAL status
mbed_official 340:28d1f895c6fe 1397 */
mbed_official 340:28d1f895c6fe 1398 HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig)
mbed_official 340:28d1f895c6fe 1399 {
mbed_official 340:28d1f895c6fe 1400 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 1401 __IO uint32_t wait_loop_index = 0;
mbed_official 340:28d1f895c6fe 1402
mbed_official 340:28d1f895c6fe 1403 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1404 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1405 assert_param(IS_ADC_CHANNEL(sConfig->Channel));
mbed_official 340:28d1f895c6fe 1406 assert_param(IS_ADC_RANK(sConfig->Rank));
mbed_official 340:28d1f895c6fe 1407 assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));
mbed_official 340:28d1f895c6fe 1408
mbed_official 340:28d1f895c6fe 1409 /* Process locked */
mbed_official 340:28d1f895c6fe 1410 __HAL_LOCK(hadc);
mbed_official 340:28d1f895c6fe 1411
mbed_official 340:28d1f895c6fe 1412 /* Parameters update conditioned to ADC state: */
mbed_official 340:28d1f895c6fe 1413 /* Parameters that can be updated when ADC is disabled or enabled without */
mbed_official 340:28d1f895c6fe 1414 /* conversion on going on regular group: */
mbed_official 340:28d1f895c6fe 1415 /* - Channel number */
mbed_official 340:28d1f895c6fe 1416 /* - Channel sampling time */
mbed_official 340:28d1f895c6fe 1417 /* - Management of internal measurement channels: Vbat/VrefInt/TempSensor */
mbed_official 340:28d1f895c6fe 1418 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 1419 {
mbed_official 340:28d1f895c6fe 1420 /* Configure channel: depending on rank setting, add it or remove it from */
mbed_official 340:28d1f895c6fe 1421 /* ADC conversion sequencer. */
mbed_official 340:28d1f895c6fe 1422 if (sConfig->Rank != ADC_RANK_NONE)
mbed_official 340:28d1f895c6fe 1423 {
mbed_official 340:28d1f895c6fe 1424 /* Regular sequence configuration */
mbed_official 340:28d1f895c6fe 1425 /* Set the channel selection register from the selected channel */
mbed_official 340:28d1f895c6fe 1426 hadc->Instance->CHSELR |= __HAL_ADC_CHSELR_CHANNEL(sConfig->Channel);
mbed_official 340:28d1f895c6fe 1427
mbed_official 340:28d1f895c6fe 1428 /* Channel sampling time configuration */
mbed_official 340:28d1f895c6fe 1429 /* Modify sampling time if needed (not needed in case of reoccurrence */
mbed_official 340:28d1f895c6fe 1430 /* for several channels programmed consecutively into the sequencer) */
mbed_official 340:28d1f895c6fe 1431 if (sConfig->SamplingTime != __HAL_ADC_GET_SAMPLINGTIME(hadc))
mbed_official 340:28d1f895c6fe 1432 {
mbed_official 340:28d1f895c6fe 1433 /* Channel sampling time configuration */
mbed_official 340:28d1f895c6fe 1434 /* Clear the old sample time */
mbed_official 340:28d1f895c6fe 1435 hadc->Instance->SMPR &= ~(ADC_SMPR_SMP);
mbed_official 340:28d1f895c6fe 1436
mbed_official 340:28d1f895c6fe 1437 /* Set the new sample time */
mbed_official 340:28d1f895c6fe 1438 hadc->Instance->SMPR |= (sConfig->SamplingTime);
mbed_official 340:28d1f895c6fe 1439 }
mbed_official 340:28d1f895c6fe 1440
mbed_official 340:28d1f895c6fe 1441 /* Management of internal measurement channels: Vbat/VrefInt/TempSensor */
mbed_official 340:28d1f895c6fe 1442 /* internal measurement paths enable: If internal channel selected, */
mbed_official 340:28d1f895c6fe 1443 /* enable dedicated internal buffers and path. */
mbed_official 441:d2c15dda23c1 1444 /* @Note: these internal measurement paths can be disabled using */
mbed_official 340:28d1f895c6fe 1445 /* HAL_ADC_DeInit() or removing the channel from sequencer with */
mbed_official 340:28d1f895c6fe 1446 /* channel configuration parameter "Rank". */
mbed_official 340:28d1f895c6fe 1447
mbed_official 340:28d1f895c6fe 1448 /* If Channel_16 is selected, enable Temp. sensor measurement path. */
mbed_official 340:28d1f895c6fe 1449 if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)
mbed_official 340:28d1f895c6fe 1450 {
mbed_official 340:28d1f895c6fe 1451 ADC->CCR |= ADC_CCR_TSEN;
mbed_official 340:28d1f895c6fe 1452
mbed_official 340:28d1f895c6fe 1453 /* Delay for temperature sensor stabilization time */
mbed_official 340:28d1f895c6fe 1454 while(wait_loop_index < ADC_TEMPSENSOR_DELAY_CPU_CYCLES)
mbed_official 340:28d1f895c6fe 1455 {
mbed_official 340:28d1f895c6fe 1456 wait_loop_index++;
mbed_official 340:28d1f895c6fe 1457 }
mbed_official 340:28d1f895c6fe 1458 }
mbed_official 340:28d1f895c6fe 1459 /* If Channel_17 is selected, enable VBAT measurement path. */
mbed_official 340:28d1f895c6fe 1460 else if (sConfig->Channel == ADC_CHANNEL_VBAT)
mbed_official 340:28d1f895c6fe 1461 {
mbed_official 340:28d1f895c6fe 1462 ADC->CCR |= ADC_CCR_VBATEN;
mbed_official 340:28d1f895c6fe 1463 }
mbed_official 340:28d1f895c6fe 1464 /* If Channel_18 is selected, enable VREFINT measurement path. */
mbed_official 340:28d1f895c6fe 1465 else if (sConfig->Channel == ADC_CHANNEL_VREFINT)
mbed_official 340:28d1f895c6fe 1466 {
mbed_official 340:28d1f895c6fe 1467 ADC->CCR |= ADC_CCR_VREFEN;
mbed_official 340:28d1f895c6fe 1468 }
mbed_official 340:28d1f895c6fe 1469
mbed_official 340:28d1f895c6fe 1470 }
mbed_official 340:28d1f895c6fe 1471 else
mbed_official 340:28d1f895c6fe 1472 {
mbed_official 340:28d1f895c6fe 1473 /* Regular sequence configuration */
mbed_official 340:28d1f895c6fe 1474 /* Reset the channel selection register from the selected channel */
mbed_official 340:28d1f895c6fe 1475 hadc->Instance->CHSELR &= ~__HAL_ADC_CHSELR_CHANNEL(sConfig->Channel);
mbed_official 340:28d1f895c6fe 1476
mbed_official 340:28d1f895c6fe 1477 /* Management of internal measurement channels: Vbat/VrefInt/TempSensor */
mbed_official 340:28d1f895c6fe 1478 /* internal measurement paths disable: If internal channel selected, */
mbed_official 340:28d1f895c6fe 1479 /* disable dedicated internal buffers and path. */
mbed_official 340:28d1f895c6fe 1480
mbed_official 340:28d1f895c6fe 1481 /* If Channel_16 is selected, disable Temp. sensor measurement path. */
mbed_official 340:28d1f895c6fe 1482 if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)
mbed_official 340:28d1f895c6fe 1483 {
mbed_official 340:28d1f895c6fe 1484 ADC->CCR &= ~ADC_CCR_TSEN;
mbed_official 340:28d1f895c6fe 1485 }
mbed_official 340:28d1f895c6fe 1486 /* If Channel_17 is selected, disable VBAT measurement path. */
mbed_official 340:28d1f895c6fe 1487 else if (sConfig->Channel == ADC_CHANNEL_VBAT)
mbed_official 340:28d1f895c6fe 1488 {
mbed_official 340:28d1f895c6fe 1489 ADC->CCR &= ~ADC_CCR_VBATEN;
mbed_official 340:28d1f895c6fe 1490 }
mbed_official 340:28d1f895c6fe 1491 /* If Channel_18 is selected, disable VREFINT measurement path. */
mbed_official 340:28d1f895c6fe 1492 else if (sConfig->Channel == ADC_CHANNEL_VREFINT)
mbed_official 340:28d1f895c6fe 1493 {
mbed_official 340:28d1f895c6fe 1494 ADC->CCR &= ~ADC_CCR_VREFEN;
mbed_official 340:28d1f895c6fe 1495 }
mbed_official 340:28d1f895c6fe 1496 }
mbed_official 340:28d1f895c6fe 1497
mbed_official 340:28d1f895c6fe 1498 }
mbed_official 340:28d1f895c6fe 1499
mbed_official 340:28d1f895c6fe 1500
mbed_official 340:28d1f895c6fe 1501 /* If a conversion is on going on regular group, no update on regular */
mbed_official 340:28d1f895c6fe 1502 /* channel could be done on neither of the channel configuration structure */
mbed_official 340:28d1f895c6fe 1503 /* parameters. */
mbed_official 340:28d1f895c6fe 1504 else
mbed_official 340:28d1f895c6fe 1505 {
mbed_official 340:28d1f895c6fe 1506 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1507 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1508
mbed_official 340:28d1f895c6fe 1509 tmpHALStatus = HAL_ERROR;
mbed_official 340:28d1f895c6fe 1510 }
mbed_official 340:28d1f895c6fe 1511
mbed_official 340:28d1f895c6fe 1512 /* Process unlocked */
mbed_official 340:28d1f895c6fe 1513 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 1514
mbed_official 340:28d1f895c6fe 1515 /* Return function status */
mbed_official 340:28d1f895c6fe 1516 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 1517 }
mbed_official 340:28d1f895c6fe 1518
mbed_official 340:28d1f895c6fe 1519
mbed_official 340:28d1f895c6fe 1520 /**
mbed_official 340:28d1f895c6fe 1521 * @brief Configures the analog watchdog.
mbed_official 340:28d1f895c6fe 1522 * @note Possibility to update parameters on the fly:
mbed_official 340:28d1f895c6fe 1523 * This function initializes the selected analog watchdog, following
mbed_official 340:28d1f895c6fe 1524 * calls to this function can be used to reconfigure some parameters
mbed_official 340:28d1f895c6fe 1525 * of structure "ADC_AnalogWDGConfTypeDef" on the fly, without reseting
mbed_official 340:28d1f895c6fe 1526 * the ADC.
mbed_official 340:28d1f895c6fe 1527 * The setting of these parameters is conditioned to ADC state.
mbed_official 340:28d1f895c6fe 1528 * For parameters constraints, see comments of structure
mbed_official 340:28d1f895c6fe 1529 * "ADC_AnalogWDGConfTypeDef".
mbed_official 340:28d1f895c6fe 1530 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1531 * @param AnalogWDGConfig: Structure of ADC analog watchdog configuration
mbed_official 340:28d1f895c6fe 1532 * @retval HAL status
mbed_official 340:28d1f895c6fe 1533 */
mbed_official 340:28d1f895c6fe 1534 HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig)
mbed_official 340:28d1f895c6fe 1535 {
mbed_official 340:28d1f895c6fe 1536 HAL_StatusTypeDef tmpHALStatus = HAL_OK;
mbed_official 340:28d1f895c6fe 1537
mbed_official 340:28d1f895c6fe 1538 uint32_t tmpAWDHighThresholdShifted;
mbed_official 340:28d1f895c6fe 1539 uint32_t tmpAWDLowThresholdShifted;
mbed_official 340:28d1f895c6fe 1540
mbed_official 340:28d1f895c6fe 1541 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1542 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1543 assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));
mbed_official 340:28d1f895c6fe 1544
mbed_official 340:28d1f895c6fe 1545 /* Verify if threshold is within the selected ADC resolution */
mbed_official 340:28d1f895c6fe 1546 assert_param(IS_ADC_RANGE(__HAL_ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->HighThreshold));
mbed_official 340:28d1f895c6fe 1547 assert_param(IS_ADC_RANGE(__HAL_ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->LowThreshold));
mbed_official 340:28d1f895c6fe 1548
mbed_official 441:d2c15dda23c1 1549 if(AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REG)
mbed_official 441:d2c15dda23c1 1550 {
mbed_official 441:d2c15dda23c1 1551 assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));
mbed_official 441:d2c15dda23c1 1552 }
mbed_official 441:d2c15dda23c1 1553
mbed_official 340:28d1f895c6fe 1554 /* Process locked */
mbed_official 340:28d1f895c6fe 1555 __HAL_LOCK(hadc);
mbed_official 340:28d1f895c6fe 1556
mbed_official 340:28d1f895c6fe 1557 /* Parameters update conditioned to ADC state: */
mbed_official 340:28d1f895c6fe 1558 /* Parameters that can be updated when ADC is disabled or enabled without */
mbed_official 340:28d1f895c6fe 1559 /* conversion on going on regular group: */
mbed_official 340:28d1f895c6fe 1560 /* - Analog watchdog channels */
mbed_official 340:28d1f895c6fe 1561 /* - Analog watchdog thresholds */
mbed_official 340:28d1f895c6fe 1562 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
mbed_official 340:28d1f895c6fe 1563 {
mbed_official 340:28d1f895c6fe 1564 /* Configuration of analog watchdog: */
mbed_official 340:28d1f895c6fe 1565 /* - Set the analog watchdog enable mode: one or overall group of */
mbed_official 340:28d1f895c6fe 1566 /* channels. */
mbed_official 340:28d1f895c6fe 1567 /* - Set the Analog watchdog channel (is not used if watchdog */
mbed_official 340:28d1f895c6fe 1568 /* mode "all channels": ADC_CFGR_AWD1SGL=0). */
mbed_official 340:28d1f895c6fe 1569 hadc->Instance->CFGR1 &= ~( ADC_CFGR1_AWDSGL |
mbed_official 340:28d1f895c6fe 1570 ADC_CFGR1_AWDEN |
mbed_official 340:28d1f895c6fe 1571 ADC_CFGR1_AWDCH );
mbed_official 340:28d1f895c6fe 1572
mbed_official 340:28d1f895c6fe 1573 hadc->Instance->CFGR1 |= ( AnalogWDGConfig->WatchdogMode |
mbed_official 340:28d1f895c6fe 1574 __HAL_ADC_CFGR_AWDCH(AnalogWDGConfig->Channel) );
mbed_official 340:28d1f895c6fe 1575
mbed_official 340:28d1f895c6fe 1576 /* Shift the offset in function of the selected ADC resolution: Thresholds*/
mbed_official 340:28d1f895c6fe 1577 /* have to be left-aligned on bit 11, the LSB (right bits) are set to 0 */
mbed_official 340:28d1f895c6fe 1578 tmpAWDHighThresholdShifted = __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold);
mbed_official 340:28d1f895c6fe 1579 tmpAWDLowThresholdShifted = __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold);
mbed_official 340:28d1f895c6fe 1580
mbed_official 340:28d1f895c6fe 1581 /* Set the high and low thresholds */
mbed_official 340:28d1f895c6fe 1582 hadc->Instance->TR &= ~(ADC_TR_HT | ADC_TR_LT);
mbed_official 340:28d1f895c6fe 1583 hadc->Instance->TR |= ( __HAL_ADC_TRX_HIGHTHRESHOLD (tmpAWDHighThresholdShifted) |
mbed_official 340:28d1f895c6fe 1584 tmpAWDLowThresholdShifted );
mbed_official 340:28d1f895c6fe 1585
mbed_official 441:d2c15dda23c1 1586 /* Clear the ADC Analog watchdog flag (in case of left enabled by */
mbed_official 340:28d1f895c6fe 1587 /* previous ADC operations) to be ready to use for HAL_ADC_IRQHandler() */
mbed_official 340:28d1f895c6fe 1588 /* or HAL_ADC_PollForEvent(). */
mbed_official 340:28d1f895c6fe 1589 __HAL_ADC_CLEAR_FLAG(hadc, ADC_IT_AWD);
mbed_official 340:28d1f895c6fe 1590
mbed_official 340:28d1f895c6fe 1591 /* Configure ADC Analog watchdog interrupt */
mbed_official 340:28d1f895c6fe 1592 if(AnalogWDGConfig->ITMode == ENABLE)
mbed_official 340:28d1f895c6fe 1593 {
mbed_official 340:28d1f895c6fe 1594 /* Enable the ADC Analog watchdog interrupt */
mbed_official 340:28d1f895c6fe 1595 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD);
mbed_official 340:28d1f895c6fe 1596 }
mbed_official 340:28d1f895c6fe 1597 else
mbed_official 340:28d1f895c6fe 1598 {
mbed_official 340:28d1f895c6fe 1599 /* Disable the ADC Analog watchdog interrupt */
mbed_official 340:28d1f895c6fe 1600 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD);
mbed_official 340:28d1f895c6fe 1601 }
mbed_official 340:28d1f895c6fe 1602
mbed_official 340:28d1f895c6fe 1603 }
mbed_official 340:28d1f895c6fe 1604 /* If a conversion is on going on regular group, no update could be done */
mbed_official 340:28d1f895c6fe 1605 /* on neither of the AWD configuration structure parameters. */
mbed_official 340:28d1f895c6fe 1606 else
mbed_official 340:28d1f895c6fe 1607 {
mbed_official 340:28d1f895c6fe 1608 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1609 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1610
mbed_official 340:28d1f895c6fe 1611 tmpHALStatus = HAL_ERROR;
mbed_official 340:28d1f895c6fe 1612 }
mbed_official 340:28d1f895c6fe 1613
mbed_official 340:28d1f895c6fe 1614
mbed_official 340:28d1f895c6fe 1615 /* Process unlocked */
mbed_official 340:28d1f895c6fe 1616 __HAL_UNLOCK(hadc);
mbed_official 340:28d1f895c6fe 1617
mbed_official 340:28d1f895c6fe 1618 /* Return function status */
mbed_official 340:28d1f895c6fe 1619 return tmpHALStatus;
mbed_official 340:28d1f895c6fe 1620 }
mbed_official 340:28d1f895c6fe 1621
mbed_official 340:28d1f895c6fe 1622
mbed_official 340:28d1f895c6fe 1623 /**
mbed_official 340:28d1f895c6fe 1624 * @}
mbed_official 340:28d1f895c6fe 1625 */
mbed_official 340:28d1f895c6fe 1626
mbed_official 340:28d1f895c6fe 1627
mbed_official 340:28d1f895c6fe 1628 /** @defgroup ADC_Exported_Functions_Group4 Peripheral State functions
mbed_official 340:28d1f895c6fe 1629 * @brief Peripheral State functions
mbed_official 340:28d1f895c6fe 1630 *
mbed_official 340:28d1f895c6fe 1631 @verbatim
mbed_official 340:28d1f895c6fe 1632 ===============================================================================
mbed_official 340:28d1f895c6fe 1633 ##### Peripheral State and Errors functions #####
mbed_official 340:28d1f895c6fe 1634 ===============================================================================
mbed_official 340:28d1f895c6fe 1635 [..]
mbed_official 340:28d1f895c6fe 1636 This subsection provides functions to get in run-time the status of the
mbed_official 340:28d1f895c6fe 1637 peripheral.
mbed_official 340:28d1f895c6fe 1638 (+) Check the ADC state
mbed_official 340:28d1f895c6fe 1639 (+) Check the ADC error code
mbed_official 340:28d1f895c6fe 1640
mbed_official 340:28d1f895c6fe 1641 @endverbatim
mbed_official 340:28d1f895c6fe 1642 * @{
mbed_official 340:28d1f895c6fe 1643 */
mbed_official 340:28d1f895c6fe 1644
mbed_official 340:28d1f895c6fe 1645 /**
mbed_official 340:28d1f895c6fe 1646 * @brief return the ADC state
mbed_official 340:28d1f895c6fe 1647 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1648 * @retval HAL state
mbed_official 340:28d1f895c6fe 1649 */
mbed_official 340:28d1f895c6fe 1650 HAL_ADC_StateTypeDef HAL_ADC_GetState(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1651 {
mbed_official 340:28d1f895c6fe 1652 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1653 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1654
mbed_official 340:28d1f895c6fe 1655 /* Return ADC state */
mbed_official 340:28d1f895c6fe 1656 return hadc->State;
mbed_official 340:28d1f895c6fe 1657 }
mbed_official 340:28d1f895c6fe 1658
mbed_official 340:28d1f895c6fe 1659 /**
mbed_official 340:28d1f895c6fe 1660 * @brief Return the ADC error code
mbed_official 340:28d1f895c6fe 1661 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1662 * @retval ADC Error Code
mbed_official 340:28d1f895c6fe 1663 */
mbed_official 340:28d1f895c6fe 1664 uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc)
mbed_official 340:28d1f895c6fe 1665 {
mbed_official 340:28d1f895c6fe 1666 return hadc->ErrorCode;
mbed_official 340:28d1f895c6fe 1667 }
mbed_official 340:28d1f895c6fe 1668
mbed_official 340:28d1f895c6fe 1669 /**
mbed_official 340:28d1f895c6fe 1670 * @}
mbed_official 340:28d1f895c6fe 1671 */
mbed_official 340:28d1f895c6fe 1672
mbed_official 340:28d1f895c6fe 1673 /**
mbed_official 340:28d1f895c6fe 1674 * @}
mbed_official 340:28d1f895c6fe 1675 */
mbed_official 340:28d1f895c6fe 1676
mbed_official 340:28d1f895c6fe 1677 /** @defgroup ADC_Private_Functions ADC Private Functions
mbed_official 340:28d1f895c6fe 1678 * @{
mbed_official 340:28d1f895c6fe 1679 */
mbed_official 340:28d1f895c6fe 1680
mbed_official 340:28d1f895c6fe 1681 /**
mbed_official 340:28d1f895c6fe 1682 * @brief Enable the selected ADC.
mbed_official 340:28d1f895c6fe 1683 * @note Prerequisite condition to use this function: ADC must be disabled
mbed_official 340:28d1f895c6fe 1684 * and voltage regulator must be enabled (done into HAL_ADC_Init()).
mbed_official 340:28d1f895c6fe 1685 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1686 * @retval HAL status.
mbed_official 340:28d1f895c6fe 1687 */
mbed_official 340:28d1f895c6fe 1688 static HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1689 {
mbed_official 340:28d1f895c6fe 1690 uint32_t tickstart = 0;
mbed_official 340:28d1f895c6fe 1691 __IO uint32_t wait_loop_index = 0;
mbed_official 340:28d1f895c6fe 1692
mbed_official 340:28d1f895c6fe 1693 /* ADC enable and wait for ADC ready (in case of ADC is disabled or */
mbed_official 340:28d1f895c6fe 1694 /* enabling phase not yet completed: flag ADC ready not yet set). */
mbed_official 340:28d1f895c6fe 1695 /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */
mbed_official 340:28d1f895c6fe 1696 /* causes: ADC clock not running, ...). */
mbed_official 340:28d1f895c6fe 1697 if (__HAL_ADC_IS_ENABLED(hadc) == RESET)
mbed_official 340:28d1f895c6fe 1698 {
mbed_official 340:28d1f895c6fe 1699 /* Check if conditions to enable the ADC are fulfilled */
mbed_official 340:28d1f895c6fe 1700 if (__HAL_ADC_ENABLING_CONDITIONS(hadc) == RESET)
mbed_official 340:28d1f895c6fe 1701 {
mbed_official 340:28d1f895c6fe 1702 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1703 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1704
mbed_official 340:28d1f895c6fe 1705 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1706 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1707
mbed_official 340:28d1f895c6fe 1708 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 1709 }
mbed_official 340:28d1f895c6fe 1710
mbed_official 340:28d1f895c6fe 1711 /* Enable the ADC peripheral */
mbed_official 340:28d1f895c6fe 1712 __HAL_ADC_ENABLE(hadc);
mbed_official 340:28d1f895c6fe 1713
mbed_official 340:28d1f895c6fe 1714 /* Delay for ADC stabilization time. */
mbed_official 340:28d1f895c6fe 1715 /* Delay fixed to worst case: maximum CPU frequency */
mbed_official 340:28d1f895c6fe 1716 while(wait_loop_index < ADC_STAB_DELAY_CPU_CYCLES)
mbed_official 340:28d1f895c6fe 1717 {
mbed_official 340:28d1f895c6fe 1718 wait_loop_index++;
mbed_official 340:28d1f895c6fe 1719 }
mbed_official 340:28d1f895c6fe 1720
mbed_official 340:28d1f895c6fe 1721 /* Get timeout */
mbed_official 340:28d1f895c6fe 1722 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 1723
mbed_official 340:28d1f895c6fe 1724 /* Wait for ADC effectively enabled */
mbed_official 340:28d1f895c6fe 1725 while(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == RESET)
mbed_official 340:28d1f895c6fe 1726 {
mbed_official 340:28d1f895c6fe 1727 if((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
mbed_official 340:28d1f895c6fe 1728 {
mbed_official 340:28d1f895c6fe 1729 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1730 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1731
mbed_official 340:28d1f895c6fe 1732 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1733 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1734
mbed_official 340:28d1f895c6fe 1735 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 1736 }
mbed_official 340:28d1f895c6fe 1737 }
mbed_official 340:28d1f895c6fe 1738
mbed_official 340:28d1f895c6fe 1739 }
mbed_official 340:28d1f895c6fe 1740
mbed_official 340:28d1f895c6fe 1741 /* Return HAL status */
mbed_official 340:28d1f895c6fe 1742 return HAL_OK;
mbed_official 340:28d1f895c6fe 1743 }
mbed_official 340:28d1f895c6fe 1744
mbed_official 340:28d1f895c6fe 1745 /**
mbed_official 340:28d1f895c6fe 1746 * @brief Disable the selected ADC.
mbed_official 340:28d1f895c6fe 1747 * @note Prerequisite condition to use this function: ADC conversions must be
mbed_official 340:28d1f895c6fe 1748 * stopped.
mbed_official 340:28d1f895c6fe 1749 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1750 * @retval HAL status.
mbed_official 340:28d1f895c6fe 1751 */
mbed_official 340:28d1f895c6fe 1752 static HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1753 {
mbed_official 340:28d1f895c6fe 1754 uint32_t tickstart = 0;
mbed_official 340:28d1f895c6fe 1755
mbed_official 340:28d1f895c6fe 1756 /* Verification if ADC is not already disabled: */
mbed_official 441:d2c15dda23c1 1757 /* @Note: forbidden to disable ADC (set bit ADC_CR_ADDIS) if ADC is already */
mbed_official 340:28d1f895c6fe 1758 /* disabled. */
mbed_official 340:28d1f895c6fe 1759 if (__HAL_ADC_IS_ENABLED(hadc) != RESET )
mbed_official 340:28d1f895c6fe 1760 {
mbed_official 340:28d1f895c6fe 1761 /* Check if conditions to disable the ADC are fulfilled */
mbed_official 340:28d1f895c6fe 1762 if (__HAL_ADC_DISABLING_CONDITIONS(hadc) != RESET)
mbed_official 340:28d1f895c6fe 1763 {
mbed_official 340:28d1f895c6fe 1764 /* Disable the ADC peripheral */
mbed_official 340:28d1f895c6fe 1765 __HAL_ADC_DISABLE(hadc);
mbed_official 340:28d1f895c6fe 1766 }
mbed_official 340:28d1f895c6fe 1767 else
mbed_official 340:28d1f895c6fe 1768 {
mbed_official 340:28d1f895c6fe 1769 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1770 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1771
mbed_official 340:28d1f895c6fe 1772 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1773 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1774
mbed_official 340:28d1f895c6fe 1775 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 1776 }
mbed_official 340:28d1f895c6fe 1777
mbed_official 340:28d1f895c6fe 1778 /* Wait for ADC effectively disabled */
mbed_official 340:28d1f895c6fe 1779 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 1780
mbed_official 340:28d1f895c6fe 1781 while(HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_ADEN))
mbed_official 340:28d1f895c6fe 1782 {
mbed_official 340:28d1f895c6fe 1783 if((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
mbed_official 340:28d1f895c6fe 1784 {
mbed_official 340:28d1f895c6fe 1785 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1786 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1787
mbed_official 340:28d1f895c6fe 1788 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1789 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1790
mbed_official 340:28d1f895c6fe 1791 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 1792 }
mbed_official 340:28d1f895c6fe 1793 }
mbed_official 340:28d1f895c6fe 1794 }
mbed_official 340:28d1f895c6fe 1795
mbed_official 340:28d1f895c6fe 1796 /* Return HAL status */
mbed_official 340:28d1f895c6fe 1797 return HAL_OK;
mbed_official 340:28d1f895c6fe 1798 }
mbed_official 340:28d1f895c6fe 1799
mbed_official 340:28d1f895c6fe 1800
mbed_official 340:28d1f895c6fe 1801 /**
mbed_official 340:28d1f895c6fe 1802 * @brief Stop ADC conversion.
mbed_official 340:28d1f895c6fe 1803 * @note Prerequisite condition to use this function: ADC conversions must be
mbed_official 340:28d1f895c6fe 1804 * stopped to disable the ADC.
mbed_official 340:28d1f895c6fe 1805 * @param hadc: ADC handle
mbed_official 340:28d1f895c6fe 1806 * @retval HAL status.
mbed_official 340:28d1f895c6fe 1807 */
mbed_official 340:28d1f895c6fe 1808 static HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef* hadc)
mbed_official 340:28d1f895c6fe 1809 {
mbed_official 340:28d1f895c6fe 1810 uint32_t tickstart = 0;
mbed_official 340:28d1f895c6fe 1811
mbed_official 340:28d1f895c6fe 1812 /* Check the parameters */
mbed_official 340:28d1f895c6fe 1813 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 340:28d1f895c6fe 1814
mbed_official 340:28d1f895c6fe 1815 /* Verification if ADC is not already stopped on regular group to bypass */
mbed_official 340:28d1f895c6fe 1816 /* this function if not needed. */
mbed_official 340:28d1f895c6fe 1817 if (__HAL_ADC_IS_CONVERSION_ONGOING_REGULAR(hadc))
mbed_official 340:28d1f895c6fe 1818 {
mbed_official 340:28d1f895c6fe 1819
mbed_official 340:28d1f895c6fe 1820 /* Stop potential conversion on going on regular group */
mbed_official 340:28d1f895c6fe 1821 /* Software is allowed to set ADSTP only when ADSTART=1 and ADDIS=0 */
mbed_official 340:28d1f895c6fe 1822 if (HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_ADSTART) &&
mbed_official 340:28d1f895c6fe 1823 HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADDIS) )
mbed_official 340:28d1f895c6fe 1824 {
mbed_official 340:28d1f895c6fe 1825 /* Stop conversions on regular group */
mbed_official 340:28d1f895c6fe 1826 hadc->Instance->CR |= ADC_CR_ADSTP;
mbed_official 340:28d1f895c6fe 1827 }
mbed_official 340:28d1f895c6fe 1828
mbed_official 340:28d1f895c6fe 1829 /* Wait for conversion effectively stopped */
mbed_official 340:28d1f895c6fe 1830 tickstart = HAL_GetTick();
mbed_official 340:28d1f895c6fe 1831
mbed_official 340:28d1f895c6fe 1832 while((hadc->Instance->CR & ADC_CR_ADSTART) != RESET)
mbed_official 340:28d1f895c6fe 1833 {
mbed_official 340:28d1f895c6fe 1834 if((HAL_GetTick() - tickstart) > ADC_STOP_CONVERSION_TIMEOUT)
mbed_official 340:28d1f895c6fe 1835 {
mbed_official 340:28d1f895c6fe 1836 /* Update ADC state machine to error */
mbed_official 340:28d1f895c6fe 1837 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 340:28d1f895c6fe 1838
mbed_official 340:28d1f895c6fe 1839 /* Set ADC error code to ADC IP internal error */
mbed_official 340:28d1f895c6fe 1840 hadc->ErrorCode |= HAL_ADC_ERROR_INTERNAL;
mbed_official 340:28d1f895c6fe 1841
mbed_official 340:28d1f895c6fe 1842 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 1843 }
mbed_official 340:28d1f895c6fe 1844 }
mbed_official 340:28d1f895c6fe 1845
mbed_official 340:28d1f895c6fe 1846 }
mbed_official 340:28d1f895c6fe 1847
mbed_official 340:28d1f895c6fe 1848 /* Return HAL status */
mbed_official 340:28d1f895c6fe 1849 return HAL_OK;
mbed_official 340:28d1f895c6fe 1850 }
mbed_official 340:28d1f895c6fe 1851
mbed_official 340:28d1f895c6fe 1852 /**
mbed_official 340:28d1f895c6fe 1853 * @}
mbed_official 340:28d1f895c6fe 1854 */
mbed_official 340:28d1f895c6fe 1855
mbed_official 340:28d1f895c6fe 1856 #endif /* HAL_ADC_MODULE_ENABLED */
mbed_official 340:28d1f895c6fe 1857 /**
mbed_official 340:28d1f895c6fe 1858 * @}
mbed_official 340:28d1f895c6fe 1859 */
mbed_official 340:28d1f895c6fe 1860
mbed_official 340:28d1f895c6fe 1861 /**
mbed_official 340:28d1f895c6fe 1862 * @}
mbed_official 340:28d1f895c6fe 1863 */
mbed_official 340:28d1f895c6fe 1864
mbed_official 340:28d1f895c6fe 1865 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/