mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

Committer:
shaoziyang
Date:
Sat Sep 13 14:25:46 2014 +0000
Revision:
323:9e901b0a5aa1
Parent:
235:685d5f11838f
test with CLOCK_SETUP = 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_adc.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 235:685d5f11838f 5 * @version V1.1.0
mbed_official 235:685d5f11838f 6 * @date 19-June-2014
mbed_official 235:685d5f11838f 7 * @brief This file provides firmware functions to manage the following
mbed_official 235:685d5f11838f 8 * functionalities of the Analog to Digital Convertor (ADC) peripheral:
mbed_official 235:685d5f11838f 9 * + Initialization and de-initialization functions
mbed_official 235:685d5f11838f 10 * + IO operation functions
mbed_official 235:685d5f11838f 11 * + State and errors functions
mbed_official 235:685d5f11838f 12 *
mbed_official 235:685d5f11838f 13 @verbatim
mbed_official 235:685d5f11838f 14 ==============================================================================
mbed_official 235:685d5f11838f 15 ##### ADC Peripheral features #####
mbed_official 235:685d5f11838f 16 ==============================================================================
mbed_official 235:685d5f11838f 17 [..]
mbed_official 235:685d5f11838f 18 (#) 12-bit, 10-bit, 8-bit or 6-bit configurable resolution.
mbed_official 235:685d5f11838f 19 (#) Interrupt generation at the end of conversion, end of injected conversion,
mbed_official 235:685d5f11838f 20 and in case of analog watchdog or overrun events
mbed_official 235:685d5f11838f 21 (#) Single and continuous conversion modes.
mbed_official 235:685d5f11838f 22 (#) Scan mode for automatic conversion of channel 0 to channel x.
mbed_official 235:685d5f11838f 23 (#) Data alignment with in-built data coherency.
mbed_official 235:685d5f11838f 24 (#) Channel-wise programmable sampling time.
mbed_official 235:685d5f11838f 25 (#) External trigger option with configurable polarity for both regular and
mbed_official 235:685d5f11838f 26 injected conversion.
mbed_official 235:685d5f11838f 27 (#) Dual/Triple mode (on devices with 2 ADCs or more).
mbed_official 235:685d5f11838f 28 (#) Configurable DMA data storage in Dual/Triple ADC mode.
mbed_official 235:685d5f11838f 29 (#) Configurable delay between conversions in Dual/Triple interleaved mode.
mbed_official 235:685d5f11838f 30 (#) ADC conversion type (refer to the datasheets).
mbed_official 235:685d5f11838f 31 (#) ADC supply requirements: 2.4 V to 3.6 V at full speed and down to 1.8 V at
mbed_official 235:685d5f11838f 32 slower speed.
mbed_official 235:685d5f11838f 33 (#) ADC input range: VREF(minus) = VIN = VREF(plus).
mbed_official 235:685d5f11838f 34 (#) DMA request generation during regular channel conversion.
mbed_official 235:685d5f11838f 35
mbed_official 235:685d5f11838f 36
mbed_official 235:685d5f11838f 37 ##### How to use this driver #####
mbed_official 235:685d5f11838f 38 ==============================================================================
mbed_official 235:685d5f11838f 39 [..]
mbed_official 235:685d5f11838f 40 (#)Initialize the ADC low level resources by implementing the HAL_ADC_MspInit():
mbed_official 235:685d5f11838f 41 (##) Enable the ADC interface clock using __ADC_CLK_ENABLE()
mbed_official 235:685d5f11838f 42 (##) ADC pins configuration
mbed_official 235:685d5f11838f 43 (+++) Enable the clock for the ADC GPIOs using the following function:
mbed_official 235:685d5f11838f 44 __GPIOx_CLK_ENABLE()
mbed_official 235:685d5f11838f 45 (+++) Configure these ADC pins in analog mode using HAL_GPIO_Init()
mbed_official 235:685d5f11838f 46 (##) In case of using interrupts (e.g. HAL_ADC_Start_IT())
mbed_official 235:685d5f11838f 47 (+++) Configure the ADC interrupt priority using HAL_NVIC_SetPriority()
mbed_official 235:685d5f11838f 48 (+++) Enable the ADC IRQ handler using HAL_NVIC_EnableIRQ()
mbed_official 235:685d5f11838f 49 (+++) In ADC IRQ handler, call HAL_ADC_IRQHandler()
mbed_official 235:685d5f11838f 50 (##) In case of using DMA to control data transfer (e.g. HAL_ADC_Start_DMA())
mbed_official 235:685d5f11838f 51 (+++) Enable the DMAx interface clock using __DMAx_CLK_ENABLE()
mbed_official 235:685d5f11838f 52 (+++) Configure and enable two DMA streams stream for managing data
mbed_official 235:685d5f11838f 53 transfer from peripheral to memory (output stream)
mbed_official 235:685d5f11838f 54 (+++) Associate the initilalized DMA handle to the CRYP DMA handle
mbed_official 235:685d5f11838f 55 using __HAL_LINKDMA()
mbed_official 235:685d5f11838f 56 (+++) Configure the priority and enable the NVIC for the transfer complete
mbed_official 235:685d5f11838f 57 interrupt on the two DMA Streams. The output stream should have higher
mbed_official 235:685d5f11838f 58 priority than the input stream.
mbed_official 235:685d5f11838f 59
mbed_official 235:685d5f11838f 60 (#) Configure the ADC Prescaler, conversion resolution and data alignment
mbed_official 235:685d5f11838f 61 using the HAL_ADC_Init() function.
mbed_official 235:685d5f11838f 62
mbed_official 235:685d5f11838f 63 (#) Configure the ADC regular channels group features, use HAL_ADC_Init()
mbed_official 235:685d5f11838f 64 and HAL_ADC_ConfigChannel() functions.
mbed_official 235:685d5f11838f 65
mbed_official 235:685d5f11838f 66 (#) Three operation modes are available within this driver :
mbed_official 235:685d5f11838f 67
mbed_official 235:685d5f11838f 68 *** Polling mode IO operation ***
mbed_official 235:685d5f11838f 69 =================================
mbed_official 235:685d5f11838f 70 [..]
mbed_official 235:685d5f11838f 71 (+) Start the ADC peripheral using HAL_ADC_Start()
mbed_official 235:685d5f11838f 72 (+) Wait for end of conversion using HAL_ADC_PollForConversion(), at this stage
mbed_official 235:685d5f11838f 73 user can specify the value of timeout according to his end application
mbed_official 235:685d5f11838f 74 (+) To read the ADC converted values, use the HAL_ADC_GetValue() function.
mbed_official 235:685d5f11838f 75 (+) Stop the ADC peripheral using HAL_ADC_Stop()
mbed_official 235:685d5f11838f 76
mbed_official 235:685d5f11838f 77 *** Interrupt mode IO operation ***
mbed_official 235:685d5f11838f 78 ===================================
mbed_official 235:685d5f11838f 79 [..]
mbed_official 235:685d5f11838f 80 (+) Start the ADC peripheral using HAL_ADC_Start_IT()
mbed_official 235:685d5f11838f 81 (+) Use HAL_ADC_IRQHandler() called under ADC_IRQHandler() Interrupt subroutine
mbed_official 235:685d5f11838f 82 (+) At ADC end of conversion HAL_ADC_ConvCpltCallback() function is executed and user can
mbed_official 235:685d5f11838f 83 add his own code by customization of function pointer HAL_ADC_ConvCpltCallback
mbed_official 235:685d5f11838f 84 (+) In case of ADC Error, HAL_ADC_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 85 add his own code by customization of function pointer HAL_ADC_ErrorCallback
mbed_official 235:685d5f11838f 86 (+) Stop the ADC peripheral using HAL_ADC_Stop_IT()
mbed_official 235:685d5f11838f 87
mbed_official 235:685d5f11838f 88 *** DMA mode IO operation ***
mbed_official 235:685d5f11838f 89 ==============================
mbed_official 235:685d5f11838f 90 [..]
mbed_official 235:685d5f11838f 91 (+) Start the ADC peripheral using HAL_ADC_Start_DMA(), at this stage the user specify the length
mbed_official 235:685d5f11838f 92 of data to be transferred at each end of conversion
mbed_official 235:685d5f11838f 93 (+) At The end of data transfer by HAL_ADC_ConvCpltCallback() function is executed and user can
mbed_official 235:685d5f11838f 94 add his own code by customization of function pointer HAL_ADC_ConvCpltCallback
mbed_official 235:685d5f11838f 95 (+) In case of transfer Error, HAL_ADC_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 96 add his own code by customization of function pointer HAL_ADC_ErrorCallback
mbed_official 235:685d5f11838f 97 (+) Stop the ADC peripheral using HAL_ADC_Stop_DMA()
mbed_official 235:685d5f11838f 98
mbed_official 235:685d5f11838f 99 *** ADC HAL driver macros list ***
mbed_official 235:685d5f11838f 100 =============================================
mbed_official 235:685d5f11838f 101 [..]
mbed_official 235:685d5f11838f 102 Below the list of most used macros in ADC HAL driver.
mbed_official 235:685d5f11838f 103
mbed_official 235:685d5f11838f 104 (+) __HAL_ADC_ENABLE : Enable the ADC peripheral
mbed_official 235:685d5f11838f 105 (+) __HAL_ADC_DISABLE : Disable the ADC peripheral
mbed_official 235:685d5f11838f 106 (+) __HAL_ADC_ENABLE_IT: Enable the ADC end of conversion interrupt
mbed_official 235:685d5f11838f 107 (+) __HAL_ADC_DISABLE_IT: Disable the ADC end of conversion interrupt
mbed_official 235:685d5f11838f 108 (+) __HAL_ADC_GET_IT_SOURCE: Check if the specified ADC interrupt source is enabled or disabled
mbed_official 235:685d5f11838f 109 (+) __HAL_ADC_CLEAR_FLAG: Clear the ADC's pending flags
mbed_official 235:685d5f11838f 110 (+) __HAL_ADC_GET_FLAG: Get the selected ADC's flag status
mbed_official 235:685d5f11838f 111 (+) __HAL_ADC_GET_RESOLUTION: Return resolution bits in CR1 register
mbed_official 235:685d5f11838f 112
mbed_official 235:685d5f11838f 113 [..]
mbed_official 235:685d5f11838f 114 (@) You can refer to the ADC HAL driver header file for more useful macros
mbed_official 235:685d5f11838f 115
mbed_official 235:685d5f11838f 116 @endverbatim
mbed_official 235:685d5f11838f 117 ******************************************************************************
mbed_official 235:685d5f11838f 118 * @attention
mbed_official 235:685d5f11838f 119 *
mbed_official 235:685d5f11838f 120 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 121 *
mbed_official 235:685d5f11838f 122 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 123 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 124 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 125 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 126 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 127 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 128 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 129 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 130 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 131 * without specific prior written permission.
mbed_official 235:685d5f11838f 132 *
mbed_official 235:685d5f11838f 133 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 134 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 135 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 136 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 137 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 138 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 139 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 140 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 141 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 142 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 143 *
mbed_official 235:685d5f11838f 144 ******************************************************************************
mbed_official 235:685d5f11838f 145 */
mbed_official 235:685d5f11838f 146
mbed_official 235:685d5f11838f 147 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 148 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 149
mbed_official 235:685d5f11838f 150 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 151 * @{
mbed_official 235:685d5f11838f 152 */
mbed_official 235:685d5f11838f 153
mbed_official 235:685d5f11838f 154 /** @defgroup ADC
mbed_official 235:685d5f11838f 155 * @brief ADC driver modules
mbed_official 235:685d5f11838f 156 * @{
mbed_official 235:685d5f11838f 157 */
mbed_official 235:685d5f11838f 158
mbed_official 235:685d5f11838f 159 #ifdef HAL_ADC_MODULE_ENABLED
mbed_official 235:685d5f11838f 160
mbed_official 235:685d5f11838f 161 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 162 /* Private define ------------------------------------------------------------*/
mbed_official 235:685d5f11838f 163 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 164 /* Private variables ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 165 /* Private function prototypes -----------------------------------------------*/
mbed_official 235:685d5f11838f 166 static void ADC_Init(ADC_HandleTypeDef* hadc);
mbed_official 235:685d5f11838f 167 static void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 168 static void ADC_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 169 static void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 170 /* Private functions ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 171
mbed_official 235:685d5f11838f 172 /** @defgroup ADC_Private_Functions
mbed_official 235:685d5f11838f 173 * @{
mbed_official 235:685d5f11838f 174 */
mbed_official 235:685d5f11838f 175
mbed_official 235:685d5f11838f 176 /** @defgroup ADC_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 177 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 178 *
mbed_official 235:685d5f11838f 179 @verbatim
mbed_official 235:685d5f11838f 180 ===============================================================================
mbed_official 235:685d5f11838f 181 ##### Initialization and de-initialization functions #####
mbed_official 235:685d5f11838f 182 ===============================================================================
mbed_official 235:685d5f11838f 183 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 184 (+) Initialize and configure the ADC.
mbed_official 235:685d5f11838f 185 (+) De-initialize the ADC.
mbed_official 235:685d5f11838f 186
mbed_official 235:685d5f11838f 187 @endverbatim
mbed_official 235:685d5f11838f 188 * @{
mbed_official 235:685d5f11838f 189 */
mbed_official 235:685d5f11838f 190
mbed_official 235:685d5f11838f 191 /**
mbed_official 235:685d5f11838f 192 * @brief Initializes the ADCx peripheral according to the specified parameters
mbed_official 235:685d5f11838f 193 * in the ADC_InitStruct and initializes the ADC MSP.
mbed_official 235:685d5f11838f 194 *
mbed_official 235:685d5f11838f 195 * @note This function is used to configure the global features of the ADC (
mbed_official 235:685d5f11838f 196 * ClockPrescaler, Resolution, Data Alignment and number of conversion), however,
mbed_official 235:685d5f11838f 197 * the rest of the configuration parameters are specific to the regular
mbed_official 235:685d5f11838f 198 * channels group (scan mode activation, continuous mode activation,
mbed_official 235:685d5f11838f 199 * External trigger source and edge, DMA continuous request after the
mbed_official 235:685d5f11838f 200 * last transfer and End of conversion selection).
mbed_official 235:685d5f11838f 201 *
mbed_official 235:685d5f11838f 202 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 203 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 204 * @retval HAL status
mbed_official 235:685d5f11838f 205 */
mbed_official 235:685d5f11838f 206 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 207 {
mbed_official 235:685d5f11838f 208 /* Check ADC handle */
mbed_official 235:685d5f11838f 209 if(hadc == NULL)
mbed_official 235:685d5f11838f 210 {
mbed_official 235:685d5f11838f 211 return HAL_ERROR;
mbed_official 235:685d5f11838f 212 }
mbed_official 235:685d5f11838f 213
mbed_official 235:685d5f11838f 214 /* Check the parameters */
mbed_official 235:685d5f11838f 215 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 235:685d5f11838f 216 assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler));
mbed_official 235:685d5f11838f 217 assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution));
mbed_official 235:685d5f11838f 218 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ScanConvMode));
mbed_official 235:685d5f11838f 219 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 235:685d5f11838f 220 assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 235:685d5f11838f 221 assert_param(IS_ADC_EXT_TRIG(hadc->Init.ExternalTrigConv));
mbed_official 235:685d5f11838f 222 assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));
mbed_official 235:685d5f11838f 223 assert_param(IS_ADC_REGULAR_LENGTH(hadc->Init.NbrOfConversion));
mbed_official 235:685d5f11838f 224 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests));
mbed_official 235:685d5f11838f 225 assert_param(IS_ADC_EOCSelection(hadc->Init.EOCSelection));
mbed_official 235:685d5f11838f 226 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));
mbed_official 235:685d5f11838f 227
mbed_official 235:685d5f11838f 228 if(hadc->State == HAL_ADC_STATE_RESET)
mbed_official 235:685d5f11838f 229 {
mbed_official 235:685d5f11838f 230 /* Init the low level hardware */
mbed_official 235:685d5f11838f 231 HAL_ADC_MspInit(hadc);
mbed_official 235:685d5f11838f 232 }
mbed_official 235:685d5f11838f 233
mbed_official 235:685d5f11838f 234 /* Initialize the ADC state */
mbed_official 235:685d5f11838f 235 hadc->State = HAL_ADC_STATE_BUSY;
mbed_official 235:685d5f11838f 236
mbed_official 235:685d5f11838f 237 /* Set ADC parameters */
mbed_official 235:685d5f11838f 238 ADC_Init(hadc);
mbed_official 235:685d5f11838f 239
mbed_official 235:685d5f11838f 240 /* Set ADC error code to none */
mbed_official 235:685d5f11838f 241 hadc->ErrorCode = HAL_ADC_ERROR_NONE;
mbed_official 235:685d5f11838f 242
mbed_official 235:685d5f11838f 243 /* Initialize the ADC state */
mbed_official 235:685d5f11838f 244 hadc->State = HAL_ADC_STATE_READY;
mbed_official 235:685d5f11838f 245
mbed_official 235:685d5f11838f 246 /* Release Lock */
mbed_official 235:685d5f11838f 247 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 248
mbed_official 235:685d5f11838f 249 /* Return function status */
mbed_official 235:685d5f11838f 250 return HAL_OK;
mbed_official 235:685d5f11838f 251 }
mbed_official 235:685d5f11838f 252
mbed_official 235:685d5f11838f 253 /**
mbed_official 235:685d5f11838f 254 * @brief Deinitializes the ADCx peripheral registers to their default reset values.
mbed_official 235:685d5f11838f 255 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 256 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 257 * @retval HAL status
mbed_official 235:685d5f11838f 258 */
mbed_official 235:685d5f11838f 259 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 260 {
mbed_official 235:685d5f11838f 261 /* Check ADC handle */
mbed_official 235:685d5f11838f 262 if(hadc == NULL)
mbed_official 235:685d5f11838f 263 {
mbed_official 235:685d5f11838f 264 return HAL_ERROR;
mbed_official 235:685d5f11838f 265 }
mbed_official 235:685d5f11838f 266
mbed_official 235:685d5f11838f 267 /* Check the parameters */
mbed_official 235:685d5f11838f 268 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
mbed_official 235:685d5f11838f 269
mbed_official 235:685d5f11838f 270 /* Change ADC state */
mbed_official 235:685d5f11838f 271 hadc->State = HAL_ADC_STATE_BUSY;
mbed_official 235:685d5f11838f 272
mbed_official 235:685d5f11838f 273 /* DeInit the low level hardware */
mbed_official 235:685d5f11838f 274 HAL_ADC_MspDeInit(hadc);
mbed_official 235:685d5f11838f 275
mbed_official 235:685d5f11838f 276 /* Set ADC error code to none */
mbed_official 235:685d5f11838f 277 hadc->ErrorCode = HAL_ADC_ERROR_NONE;
mbed_official 235:685d5f11838f 278
mbed_official 235:685d5f11838f 279 /* Change ADC state */
mbed_official 235:685d5f11838f 280 hadc->State = HAL_ADC_STATE_RESET;
mbed_official 235:685d5f11838f 281
mbed_official 235:685d5f11838f 282 /* Return function status */
mbed_official 235:685d5f11838f 283 return HAL_OK;
mbed_official 235:685d5f11838f 284 }
mbed_official 235:685d5f11838f 285
mbed_official 235:685d5f11838f 286 /**
mbed_official 235:685d5f11838f 287 * @brief Initializes the ADC MSP.
mbed_official 235:685d5f11838f 288 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 289 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 290 * @retval None
mbed_official 235:685d5f11838f 291 */
mbed_official 235:685d5f11838f 292 __weak void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 293 {
mbed_official 235:685d5f11838f 294 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 295 the HAL_ADC_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 296 */
mbed_official 235:685d5f11838f 297 }
mbed_official 235:685d5f11838f 298
mbed_official 235:685d5f11838f 299 /**
mbed_official 235:685d5f11838f 300 * @brief DeInitializes the ADC MSP.
mbed_official 235:685d5f11838f 301 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 302 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 303 * @retval None
mbed_official 235:685d5f11838f 304 */
mbed_official 235:685d5f11838f 305 __weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 306 {
mbed_official 235:685d5f11838f 307 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 308 the HAL_ADC_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 309 */
mbed_official 235:685d5f11838f 310 }
mbed_official 235:685d5f11838f 311
mbed_official 235:685d5f11838f 312 /**
mbed_official 235:685d5f11838f 313 * @}
mbed_official 235:685d5f11838f 314 */
mbed_official 235:685d5f11838f 315
mbed_official 235:685d5f11838f 316 /** @defgroup ADC_Group2 IO operation functions
mbed_official 235:685d5f11838f 317 * @brief IO operation functions
mbed_official 235:685d5f11838f 318 *
mbed_official 235:685d5f11838f 319 @verbatim
mbed_official 235:685d5f11838f 320 ===============================================================================
mbed_official 235:685d5f11838f 321 ##### IO operation functions #####
mbed_official 235:685d5f11838f 322 ===============================================================================
mbed_official 235:685d5f11838f 323 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 324 (+) Start conversion of regular channel.
mbed_official 235:685d5f11838f 325 (+) Stop conversion of regular channel.
mbed_official 235:685d5f11838f 326 (+) Start conversion of regular channel and enable interrupt.
mbed_official 235:685d5f11838f 327 (+) Stop conversion of regular channel and disable interrupt.
mbed_official 235:685d5f11838f 328 (+) Start conversion of regular channel and enable DMA transfer.
mbed_official 235:685d5f11838f 329 (+) Stop conversion of regular channel and disable DMA transfer.
mbed_official 235:685d5f11838f 330 (+) Handle ADC interrupt request.
mbed_official 235:685d5f11838f 331
mbed_official 235:685d5f11838f 332 @endverbatim
mbed_official 235:685d5f11838f 333 * @{
mbed_official 235:685d5f11838f 334 */
mbed_official 235:685d5f11838f 335
mbed_official 235:685d5f11838f 336 /**
mbed_official 235:685d5f11838f 337 * @brief Enables ADC and starts conversion of the regular channels.
mbed_official 235:685d5f11838f 338 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 339 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 340 * @retval HAL status
mbed_official 235:685d5f11838f 341 */
mbed_official 235:685d5f11838f 342 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 343 {
mbed_official 235:685d5f11838f 344 uint16_t i = 0;
mbed_official 235:685d5f11838f 345
mbed_official 235:685d5f11838f 346 /* Check the parameters */
mbed_official 235:685d5f11838f 347 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 235:685d5f11838f 348 assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 235:685d5f11838f 349
mbed_official 235:685d5f11838f 350 /* Process locked */
mbed_official 235:685d5f11838f 351 __HAL_LOCK(hadc);
mbed_official 235:685d5f11838f 352
mbed_official 235:685d5f11838f 353 /* Check if an injected conversion is ongoing */
mbed_official 235:685d5f11838f 354 if(hadc->State == HAL_ADC_STATE_BUSY_INJ)
mbed_official 235:685d5f11838f 355 {
mbed_official 235:685d5f11838f 356 /* Change ADC state */
mbed_official 235:685d5f11838f 357 hadc->State = HAL_ADC_STATE_BUSY_INJ_REG;
mbed_official 235:685d5f11838f 358 }
mbed_official 235:685d5f11838f 359 else
mbed_official 235:685d5f11838f 360 {
mbed_official 235:685d5f11838f 361 /* Change ADC state */
mbed_official 235:685d5f11838f 362 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 235:685d5f11838f 363 }
mbed_official 235:685d5f11838f 364
mbed_official 235:685d5f11838f 365 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 235:685d5f11838f 366 Tstab time the ADC's stabilization */
mbed_official 235:685d5f11838f 367 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 235:685d5f11838f 368 {
mbed_official 235:685d5f11838f 369 /* Enable the Peripheral */
mbed_official 235:685d5f11838f 370 __HAL_ADC_ENABLE(hadc);
mbed_official 235:685d5f11838f 371
mbed_official 235:685d5f11838f 372 /* Delay inserted to wait during Tstab time the ADC's stabilazation */
mbed_official 235:685d5f11838f 373 for(; i <= 540; i++)
mbed_official 235:685d5f11838f 374 {
mbed_official 235:685d5f11838f 375 __NOP();
mbed_official 235:685d5f11838f 376 }
mbed_official 235:685d5f11838f 377 }
mbed_official 235:685d5f11838f 378
mbed_official 235:685d5f11838f 379 /* Check if Multimode enabled */
mbed_official 235:685d5f11838f 380 if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI))
mbed_official 235:685d5f11838f 381 {
mbed_official 235:685d5f11838f 382 /* if no external trigger present enable software conversion of regular channels */
mbed_official 235:685d5f11838f 383 if(hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE)
mbed_official 235:685d5f11838f 384 {
mbed_official 235:685d5f11838f 385 /* Enable the selected ADC software conversion for regular group */
mbed_official 235:685d5f11838f 386 hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
mbed_official 235:685d5f11838f 387 }
mbed_official 235:685d5f11838f 388 }
mbed_official 235:685d5f11838f 389 else
mbed_official 235:685d5f11838f 390 {
mbed_official 235:685d5f11838f 391 /* if instance of handle correspond to ADC1 and no external trigger present enable software conversion of regular channels */
mbed_official 235:685d5f11838f 392 if((hadc->Instance == ADC1) && (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE))
mbed_official 235:685d5f11838f 393 {
mbed_official 235:685d5f11838f 394 /* Enable the selected ADC software conversion for regular group */
mbed_official 235:685d5f11838f 395 hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
mbed_official 235:685d5f11838f 396 }
mbed_official 235:685d5f11838f 397 }
mbed_official 235:685d5f11838f 398
mbed_official 235:685d5f11838f 399 /* Process unlocked */
mbed_official 235:685d5f11838f 400 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 401
mbed_official 235:685d5f11838f 402 /* Return function status */
mbed_official 235:685d5f11838f 403 return HAL_OK;
mbed_official 235:685d5f11838f 404 }
mbed_official 235:685d5f11838f 405
mbed_official 235:685d5f11838f 406 /**
mbed_official 235:685d5f11838f 407 * @brief Disables ADC and stop conversion of regular channels.
mbed_official 235:685d5f11838f 408 *
mbed_official 235:685d5f11838f 409 * @note Caution: This function will stop also injected channels.
mbed_official 235:685d5f11838f 410 *
mbed_official 235:685d5f11838f 411 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 412 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 413 *
mbed_official 235:685d5f11838f 414 * @retval HAL status.
mbed_official 235:685d5f11838f 415 */
mbed_official 235:685d5f11838f 416 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 417 {
mbed_official 235:685d5f11838f 418 /* Disable the Peripheral */
mbed_official 235:685d5f11838f 419 __HAL_ADC_DISABLE(hadc);
mbed_official 235:685d5f11838f 420
mbed_official 235:685d5f11838f 421 /* Change ADC state */
mbed_official 235:685d5f11838f 422 hadc->State = HAL_ADC_STATE_READY;
mbed_official 235:685d5f11838f 423
mbed_official 235:685d5f11838f 424 /* Return function status */
mbed_official 235:685d5f11838f 425 return HAL_OK;
mbed_official 235:685d5f11838f 426 }
mbed_official 235:685d5f11838f 427
mbed_official 235:685d5f11838f 428 /**
mbed_official 235:685d5f11838f 429 * @brief Poll for regular conversion complete
mbed_official 235:685d5f11838f 430 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 431 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 432 * @param Timeout: Timeout value in millisecond.
mbed_official 235:685d5f11838f 433 * @retval HAL status
mbed_official 235:685d5f11838f 434 */
mbed_official 235:685d5f11838f 435 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
mbed_official 235:685d5f11838f 436 {
mbed_official 235:685d5f11838f 437 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 438
mbed_official 235:685d5f11838f 439 /* Get tick */
mbed_official 235:685d5f11838f 440 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 441
mbed_official 235:685d5f11838f 442 /* Check End of conversion flag */
mbed_official 235:685d5f11838f 443 while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)))
mbed_official 235:685d5f11838f 444 {
mbed_official 235:685d5f11838f 445 /* Check for the Timeout */
mbed_official 235:685d5f11838f 446 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 447 {
mbed_official 235:685d5f11838f 448 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 449 {
mbed_official 235:685d5f11838f 450 hadc->State= HAL_ADC_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 451 /* Process unlocked */
mbed_official 235:685d5f11838f 452 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 453 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 454 }
mbed_official 235:685d5f11838f 455 }
mbed_official 235:685d5f11838f 456 }
mbed_official 235:685d5f11838f 457
mbed_official 235:685d5f11838f 458 /* Check if an injected conversion is ready */
mbed_official 235:685d5f11838f 459 if(hadc->State == HAL_ADC_STATE_EOC_INJ)
mbed_official 235:685d5f11838f 460 {
mbed_official 235:685d5f11838f 461 /* Change ADC state */
mbed_official 235:685d5f11838f 462 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 235:685d5f11838f 463 }
mbed_official 235:685d5f11838f 464 else
mbed_official 235:685d5f11838f 465 {
mbed_official 235:685d5f11838f 466 /* Change ADC state */
mbed_official 235:685d5f11838f 467 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 235:685d5f11838f 468 }
mbed_official 235:685d5f11838f 469
mbed_official 235:685d5f11838f 470 /* Return ADC state */
mbed_official 235:685d5f11838f 471 return HAL_OK;
mbed_official 235:685d5f11838f 472 }
mbed_official 235:685d5f11838f 473
mbed_official 235:685d5f11838f 474 /**
mbed_official 235:685d5f11838f 475 * @brief Poll for conversion event
mbed_official 235:685d5f11838f 476 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 477 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 478 * @param EventType: the ADC event type.
mbed_official 235:685d5f11838f 479 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 480 * @arg AWD_EVENT: ADC Analog watch Dog event.
mbed_official 235:685d5f11838f 481 * @arg OVR_EVENT: ADC Overrun event.
mbed_official 235:685d5f11838f 482 * @param Timeout: Timeout value in millisecond.
mbed_official 235:685d5f11838f 483 * @retval HAL status
mbed_official 235:685d5f11838f 484 */
mbed_official 235:685d5f11838f 485 HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef* hadc, uint32_t EventType, uint32_t Timeout)
mbed_official 235:685d5f11838f 486 {
mbed_official 235:685d5f11838f 487 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 488
mbed_official 235:685d5f11838f 489 /* Check the parameters */
mbed_official 235:685d5f11838f 490 assert_param(IS_ADC_EVENT_TYPE(EventType));
mbed_official 235:685d5f11838f 491
mbed_official 235:685d5f11838f 492 /* Get tick */
mbed_official 235:685d5f11838f 493 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 494
mbed_official 235:685d5f11838f 495 /* Check selected event flag */
mbed_official 235:685d5f11838f 496 while(!(__HAL_ADC_GET_FLAG(hadc,EventType)))
mbed_official 235:685d5f11838f 497 {
mbed_official 235:685d5f11838f 498 /* Check for the Timeout */
mbed_official 235:685d5f11838f 499 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 500 {
mbed_official 235:685d5f11838f 501 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 502 {
mbed_official 235:685d5f11838f 503 hadc->State= HAL_ADC_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 504 /* Process unlocked */
mbed_official 235:685d5f11838f 505 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 506 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 507 }
mbed_official 235:685d5f11838f 508 }
mbed_official 235:685d5f11838f 509 }
mbed_official 235:685d5f11838f 510
mbed_official 235:685d5f11838f 511 /* Check analog watchdog flag */
mbed_official 235:685d5f11838f 512 if(EventType == AWD_EVENT)
mbed_official 235:685d5f11838f 513 {
mbed_official 235:685d5f11838f 514 /* Change ADC state */
mbed_official 235:685d5f11838f 515 hadc->State = HAL_ADC_STATE_AWD;
mbed_official 235:685d5f11838f 516
mbed_official 235:685d5f11838f 517 /* Clear the ADCx's analog watchdog flag */
mbed_official 235:685d5f11838f 518 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);
mbed_official 235:685d5f11838f 519 }
mbed_official 235:685d5f11838f 520 else
mbed_official 235:685d5f11838f 521 {
mbed_official 235:685d5f11838f 522 /* Change ADC state */
mbed_official 235:685d5f11838f 523 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 235:685d5f11838f 524
mbed_official 235:685d5f11838f 525 /* Clear the ADCx's Overrun flag */
mbed_official 235:685d5f11838f 526 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR);
mbed_official 235:685d5f11838f 527 }
mbed_official 235:685d5f11838f 528
mbed_official 235:685d5f11838f 529 /* Return ADC state */
mbed_official 235:685d5f11838f 530 return HAL_OK;
mbed_official 235:685d5f11838f 531 }
mbed_official 235:685d5f11838f 532
mbed_official 235:685d5f11838f 533
mbed_official 235:685d5f11838f 534 /**
mbed_official 235:685d5f11838f 535 * @brief Enables the interrupt and starts ADC conversion of regular channels.
mbed_official 235:685d5f11838f 536 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 537 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 538 * @retval HAL status.
mbed_official 235:685d5f11838f 539 */
mbed_official 235:685d5f11838f 540 HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 541 {
mbed_official 235:685d5f11838f 542 uint16_t i = 0;
mbed_official 235:685d5f11838f 543
mbed_official 235:685d5f11838f 544 /* Check the parameters */
mbed_official 235:685d5f11838f 545 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 235:685d5f11838f 546 assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 235:685d5f11838f 547
mbed_official 235:685d5f11838f 548 /* Process locked */
mbed_official 235:685d5f11838f 549 __HAL_LOCK(hadc);
mbed_official 235:685d5f11838f 550
mbed_official 235:685d5f11838f 551 /* Check if an injected conversion is ongoing */
mbed_official 235:685d5f11838f 552 if(hadc->State == HAL_ADC_STATE_BUSY_INJ)
mbed_official 235:685d5f11838f 553 {
mbed_official 235:685d5f11838f 554 /* Change ADC state */
mbed_official 235:685d5f11838f 555 hadc->State = HAL_ADC_STATE_BUSY_INJ_REG;
mbed_official 235:685d5f11838f 556 }
mbed_official 235:685d5f11838f 557 else
mbed_official 235:685d5f11838f 558 {
mbed_official 235:685d5f11838f 559 /* Change ADC state */
mbed_official 235:685d5f11838f 560 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 235:685d5f11838f 561 }
mbed_official 235:685d5f11838f 562
mbed_official 235:685d5f11838f 563 /* Set ADC error code to none */
mbed_official 235:685d5f11838f 564 hadc->ErrorCode = HAL_ADC_ERROR_NONE;
mbed_official 235:685d5f11838f 565
mbed_official 235:685d5f11838f 566 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 235:685d5f11838f 567 Tstab time the ADC's stabilization */
mbed_official 235:685d5f11838f 568 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 235:685d5f11838f 569 {
mbed_official 235:685d5f11838f 570 /* Enable the Peripheral */
mbed_official 235:685d5f11838f 571 __HAL_ADC_ENABLE(hadc);
mbed_official 235:685d5f11838f 572
mbed_official 235:685d5f11838f 573 /* Delay inserted to wait during Tstab time the ADC's stabilazation */
mbed_official 235:685d5f11838f 574 for(; i <= 540; i++)
mbed_official 235:685d5f11838f 575 {
mbed_official 235:685d5f11838f 576 __NOP();
mbed_official 235:685d5f11838f 577 }
mbed_official 235:685d5f11838f 578 }
mbed_official 235:685d5f11838f 579
mbed_official 235:685d5f11838f 580 /* Enable the ADC overrun interrupt */
mbed_official 235:685d5f11838f 581 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 582
mbed_official 235:685d5f11838f 583 /* Enable the ADC end of conversion interrupt for regular group */
mbed_official 235:685d5f11838f 584 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC);
mbed_official 235:685d5f11838f 585
mbed_official 235:685d5f11838f 586 /* Check if Multimode enabled */
mbed_official 235:685d5f11838f 587 if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI))
mbed_official 235:685d5f11838f 588 {
mbed_official 235:685d5f11838f 589 /* if no externel trigger present enable software conversion of regular channels */
mbed_official 235:685d5f11838f 590 if (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE)
mbed_official 235:685d5f11838f 591 {
mbed_official 235:685d5f11838f 592 /* Enable the selected ADC software conversion for regular group */
mbed_official 235:685d5f11838f 593 hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
mbed_official 235:685d5f11838f 594 }
mbed_official 235:685d5f11838f 595 }
mbed_official 235:685d5f11838f 596 else
mbed_official 235:685d5f11838f 597 {
mbed_official 235:685d5f11838f 598 /* if instance of handle correspond to ADC1 and no external trigger present enable software conversion of regular channels */
mbed_official 235:685d5f11838f 599 if ((hadc->Instance == (ADC_TypeDef*)0x40012000) && (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE))
mbed_official 235:685d5f11838f 600 {
mbed_official 235:685d5f11838f 601 /* Enable the selected ADC software conversion for regular group */
mbed_official 235:685d5f11838f 602 hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
mbed_official 235:685d5f11838f 603 }
mbed_official 235:685d5f11838f 604 }
mbed_official 235:685d5f11838f 605
mbed_official 235:685d5f11838f 606 /* Process unlocked */
mbed_official 235:685d5f11838f 607 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 608
mbed_official 235:685d5f11838f 609 /* Return function status */
mbed_official 235:685d5f11838f 610 return HAL_OK;
mbed_official 235:685d5f11838f 611 }
mbed_official 235:685d5f11838f 612
mbed_official 235:685d5f11838f 613 /**
mbed_official 235:685d5f11838f 614 * @brief Disables the interrupt and stop ADC conversion of regular channels.
mbed_official 235:685d5f11838f 615 *
mbed_official 235:685d5f11838f 616 * @note Caution: This function will stop also injected channels.
mbed_official 235:685d5f11838f 617 *
mbed_official 235:685d5f11838f 618 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 619 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 620 * @retval HAL status.
mbed_official 235:685d5f11838f 621 */
mbed_official 235:685d5f11838f 622 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 623 {
mbed_official 235:685d5f11838f 624 /* Disable the ADC end of conversion interrupt for regular group */
mbed_official 235:685d5f11838f 625 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);
mbed_official 235:685d5f11838f 626
mbed_official 235:685d5f11838f 627 /* Disable the ADC end of conversion interrupt for injected group */
mbed_official 235:685d5f11838f 628 __HAL_ADC_DISABLE_IT(hadc, ADC_CR1_JEOCIE);
mbed_official 235:685d5f11838f 629
mbed_official 235:685d5f11838f 630 /* Enable the Periphral */
mbed_official 235:685d5f11838f 631 __HAL_ADC_DISABLE(hadc);
mbed_official 235:685d5f11838f 632
mbed_official 235:685d5f11838f 633 /* Change ADC state */
mbed_official 235:685d5f11838f 634 hadc->State = HAL_ADC_STATE_READY;
mbed_official 235:685d5f11838f 635
mbed_official 235:685d5f11838f 636 /* Return function status */
mbed_official 235:685d5f11838f 637 return HAL_OK;
mbed_official 235:685d5f11838f 638 }
mbed_official 235:685d5f11838f 639
mbed_official 235:685d5f11838f 640 /**
mbed_official 235:685d5f11838f 641 * @brief Handles ADC interrupt request
mbed_official 235:685d5f11838f 642 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 643 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 644 * @retval None
mbed_official 235:685d5f11838f 645 */
mbed_official 235:685d5f11838f 646 void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 647 {
mbed_official 235:685d5f11838f 648 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 235:685d5f11838f 649
mbed_official 235:685d5f11838f 650 /* Check the parameters */
mbed_official 235:685d5f11838f 651 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 235:685d5f11838f 652 assert_param(IS_ADC_REGULAR_LENGTH(hadc->Init.NbrOfConversion));
mbed_official 235:685d5f11838f 653 assert_param(IS_ADC_EOCSelection(hadc->Init.EOCSelection));
mbed_official 235:685d5f11838f 654
mbed_official 235:685d5f11838f 655 tmp1 = __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC);
mbed_official 235:685d5f11838f 656 tmp2 = __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOC);
mbed_official 235:685d5f11838f 657 /* Check End of conversion flag for regular channels */
mbed_official 235:685d5f11838f 658 if(tmp1 && tmp2)
mbed_official 235:685d5f11838f 659 {
mbed_official 235:685d5f11838f 660 /* Check if an injected conversion is ready */
mbed_official 235:685d5f11838f 661 if(hadc->State == HAL_ADC_STATE_EOC_INJ)
mbed_official 235:685d5f11838f 662 {
mbed_official 235:685d5f11838f 663 /* Change ADC state */
mbed_official 235:685d5f11838f 664 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 235:685d5f11838f 665 }
mbed_official 235:685d5f11838f 666 else
mbed_official 235:685d5f11838f 667 {
mbed_official 235:685d5f11838f 668 /* Change ADC state */
mbed_official 235:685d5f11838f 669 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 235:685d5f11838f 670 }
mbed_official 235:685d5f11838f 671
mbed_official 235:685d5f11838f 672 if((hadc->Init.ContinuousConvMode == DISABLE) && (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE))
mbed_official 235:685d5f11838f 673 {
mbed_official 235:685d5f11838f 674 if(hadc->Init.EOCSelection == EOC_SEQ_CONV)
mbed_official 235:685d5f11838f 675 {
mbed_official 235:685d5f11838f 676 /* DISABLE the ADC end of conversion interrupt for regular group */
mbed_official 235:685d5f11838f 677 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);
mbed_official 235:685d5f11838f 678
mbed_official 235:685d5f11838f 679 /* DISABLE the ADC overrun interrupt */
mbed_official 235:685d5f11838f 680 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 681 }
mbed_official 235:685d5f11838f 682 else
mbed_official 235:685d5f11838f 683 {
mbed_official 235:685d5f11838f 684 if (hadc->NbrOfCurrentConversionRank == 0)
mbed_official 235:685d5f11838f 685 {
mbed_official 235:685d5f11838f 686 hadc->NbrOfCurrentConversionRank = hadc->Init.NbrOfConversion;
mbed_official 235:685d5f11838f 687 }
mbed_official 235:685d5f11838f 688
mbed_official 235:685d5f11838f 689 /* Decrement the number of conversion when an interrupt occurs */
mbed_official 235:685d5f11838f 690 hadc->NbrOfCurrentConversionRank--;
mbed_official 235:685d5f11838f 691
mbed_official 235:685d5f11838f 692 /* Check if all conversions are finished */
mbed_official 235:685d5f11838f 693 if(hadc->NbrOfCurrentConversionRank == 0)
mbed_official 235:685d5f11838f 694 {
mbed_official 235:685d5f11838f 695 /* DISABLE the ADC end of conversion interrupt for regular group */
mbed_official 235:685d5f11838f 696 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);
mbed_official 235:685d5f11838f 697
mbed_official 235:685d5f11838f 698 /* DISABLE the ADC overrun interrupt */
mbed_official 235:685d5f11838f 699 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 700 }
mbed_official 235:685d5f11838f 701 }
mbed_official 235:685d5f11838f 702 }
mbed_official 235:685d5f11838f 703
mbed_official 235:685d5f11838f 704 /* Conversion complete callback */
mbed_official 235:685d5f11838f 705 HAL_ADC_ConvCpltCallback(hadc);
mbed_official 235:685d5f11838f 706
mbed_official 235:685d5f11838f 707 /* Clear the ADCx flag for regular end of conversion */
mbed_official 235:685d5f11838f 708 __HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_EOC);
mbed_official 235:685d5f11838f 709 }
mbed_official 235:685d5f11838f 710
mbed_official 235:685d5f11838f 711 tmp1 = __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOC);
mbed_official 235:685d5f11838f 712 tmp2 = __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_JEOC);
mbed_official 235:685d5f11838f 713 /* Check End of conversion flag for injected channels */
mbed_official 235:685d5f11838f 714 if(tmp1 && tmp2)
mbed_official 235:685d5f11838f 715 {
mbed_official 235:685d5f11838f 716 /* Check if a regular conversion is ready */
mbed_official 235:685d5f11838f 717 if(hadc->State == HAL_ADC_STATE_EOC_REG)
mbed_official 235:685d5f11838f 718 {
mbed_official 235:685d5f11838f 719 /* Change ADC state */
mbed_official 235:685d5f11838f 720 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 235:685d5f11838f 721 }
mbed_official 235:685d5f11838f 722 else
mbed_official 235:685d5f11838f 723 {
mbed_official 235:685d5f11838f 724 /* Change ADC state */
mbed_official 235:685d5f11838f 725 hadc->State = HAL_ADC_STATE_EOC_INJ;
mbed_official 235:685d5f11838f 726 }
mbed_official 235:685d5f11838f 727
mbed_official 235:685d5f11838f 728 tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO);
mbed_official 235:685d5f11838f 729 tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN);
mbed_official 235:685d5f11838f 730 if(((hadc->Init.ContinuousConvMode == DISABLE) || tmp1) && tmp2)
mbed_official 235:685d5f11838f 731 {
mbed_official 235:685d5f11838f 732 /* DISABLE the ADC end of conversion interrupt for injected group */
mbed_official 235:685d5f11838f 733 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);
mbed_official 235:685d5f11838f 734 }
mbed_official 235:685d5f11838f 735
mbed_official 235:685d5f11838f 736 /* Conversion complete callback */
mbed_official 235:685d5f11838f 737 HAL_ADCEx_InjectedConvCpltCallback(hadc);
mbed_official 235:685d5f11838f 738
mbed_official 235:685d5f11838f 739 /* Clear the ADCx flag for injected end of conversion */
mbed_official 235:685d5f11838f 740 __HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_JEOC);
mbed_official 235:685d5f11838f 741 }
mbed_official 235:685d5f11838f 742
mbed_official 235:685d5f11838f 743 tmp1 = __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_AWD);
mbed_official 235:685d5f11838f 744 tmp2 = __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_AWD);
mbed_official 235:685d5f11838f 745 /* Check Analog watchdog flag */
mbed_official 235:685d5f11838f 746 if(tmp1 && tmp2)
mbed_official 235:685d5f11838f 747 {
mbed_official 235:685d5f11838f 748 /* Change ADC state */
mbed_official 235:685d5f11838f 749 hadc->State = HAL_ADC_STATE_AWD;
mbed_official 235:685d5f11838f 750
mbed_official 235:685d5f11838f 751 /* Clear the ADCx's Analog watchdog flag */
mbed_official 235:685d5f11838f 752 __HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_AWD);
mbed_official 235:685d5f11838f 753
mbed_official 235:685d5f11838f 754 /* Level out of window callback */
mbed_official 235:685d5f11838f 755 HAL_ADC_LevelOutOfWindowCallback(hadc);
mbed_official 235:685d5f11838f 756 }
mbed_official 235:685d5f11838f 757
mbed_official 235:685d5f11838f 758 tmp1 = __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_OVR);
mbed_official 235:685d5f11838f 759 tmp2 = __HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 760 /* Check Overrun flag */
mbed_official 235:685d5f11838f 761 if(tmp1 && tmp2)
mbed_official 235:685d5f11838f 762 {
mbed_official 235:685d5f11838f 763 /* Change ADC state to overrun state */
mbed_official 235:685d5f11838f 764 hadc->State = HAL_ADC_STATE_ERROR;
mbed_official 235:685d5f11838f 765
mbed_official 235:685d5f11838f 766 /* Set ADC error code to overrun */
mbed_official 235:685d5f11838f 767 hadc->ErrorCode |= HAL_ADC_ERROR_OVR;
mbed_official 235:685d5f11838f 768
mbed_official 235:685d5f11838f 769 /* Clear the Overrun flag */
mbed_official 235:685d5f11838f 770 __HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_OVR);
mbed_official 235:685d5f11838f 771
mbed_official 235:685d5f11838f 772 /* Error callback */
mbed_official 235:685d5f11838f 773 HAL_ADC_ErrorCallback(hadc);
mbed_official 235:685d5f11838f 774 }
mbed_official 235:685d5f11838f 775 }
mbed_official 235:685d5f11838f 776
mbed_official 235:685d5f11838f 777 /**
mbed_official 235:685d5f11838f 778 * @brief Enables ADC DMA request after last transfer (Single-ADC mode) and enables ADC peripheral
mbed_official 235:685d5f11838f 779 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 780 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 781 * @param pData: The destination Buffer address.
mbed_official 235:685d5f11838f 782 * @param Length: The length of data to be transferred from ADC peripheral to memory.
mbed_official 235:685d5f11838f 783 * @retval HAL status
mbed_official 235:685d5f11838f 784 */
mbed_official 235:685d5f11838f 785 HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
mbed_official 235:685d5f11838f 786 {
mbed_official 235:685d5f11838f 787 uint16_t i = 0;
mbed_official 235:685d5f11838f 788
mbed_official 235:685d5f11838f 789 /* Check the parameters */
mbed_official 235:685d5f11838f 790 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 235:685d5f11838f 791 assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 235:685d5f11838f 792
mbed_official 235:685d5f11838f 793 /* Process locked */
mbed_official 235:685d5f11838f 794 __HAL_LOCK(hadc);
mbed_official 235:685d5f11838f 795
mbed_official 235:685d5f11838f 796 /* Enable ADC overrun interrupt */
mbed_official 235:685d5f11838f 797 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 798
mbed_official 235:685d5f11838f 799 /* Enable ADC DMA mode */
mbed_official 235:685d5f11838f 800 hadc->Instance->CR2 |= ADC_CR2_DMA;
mbed_official 235:685d5f11838f 801
mbed_official 235:685d5f11838f 802 /* Set the DMA transfer complete callback */
mbed_official 235:685d5f11838f 803 hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
mbed_official 235:685d5f11838f 804
mbed_official 235:685d5f11838f 805 /* Set the DMA half transfer complete callback */
mbed_official 235:685d5f11838f 806 hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
mbed_official 235:685d5f11838f 807
mbed_official 235:685d5f11838f 808 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 809 hadc->DMA_Handle->XferErrorCallback = ADC_DMAError ;
mbed_official 235:685d5f11838f 810
mbed_official 235:685d5f11838f 811 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 812 HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
mbed_official 235:685d5f11838f 813
mbed_official 235:685d5f11838f 814 /* Change ADC state */
mbed_official 235:685d5f11838f 815 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 235:685d5f11838f 816
mbed_official 235:685d5f11838f 817 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 235:685d5f11838f 818 Tstab time the ADC's stabilization */
mbed_official 235:685d5f11838f 819 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 235:685d5f11838f 820 {
mbed_official 235:685d5f11838f 821 /* Enable the Peripheral */
mbed_official 235:685d5f11838f 822 __HAL_ADC_ENABLE(hadc);
mbed_official 235:685d5f11838f 823
mbed_official 235:685d5f11838f 824 /* Delay inserted to wait during Tstab time the ADC's stabilazation */
mbed_official 235:685d5f11838f 825 for(; i <= 540; i++)
mbed_official 235:685d5f11838f 826 {
mbed_official 235:685d5f11838f 827 __NOP();
mbed_official 235:685d5f11838f 828 }
mbed_official 235:685d5f11838f 829 }
mbed_official 235:685d5f11838f 830
mbed_official 235:685d5f11838f 831 /* if no external trigger present enable software conversion of regular channels */
mbed_official 235:685d5f11838f 832 if (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE)
mbed_official 235:685d5f11838f 833 {
mbed_official 235:685d5f11838f 834 /* Enable the selected ADC software conversion for regular group */
mbed_official 235:685d5f11838f 835 hadc->Instance->CR2 |= ADC_CR2_SWSTART;
mbed_official 235:685d5f11838f 836 }
mbed_official 235:685d5f11838f 837
mbed_official 235:685d5f11838f 838 /* Process unlocked */
mbed_official 235:685d5f11838f 839 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 840
mbed_official 235:685d5f11838f 841 /* Return function status */
mbed_official 235:685d5f11838f 842 return HAL_OK;
mbed_official 235:685d5f11838f 843 }
mbed_official 235:685d5f11838f 844
mbed_official 235:685d5f11838f 845 /**
mbed_official 235:685d5f11838f 846 * @brief Disables ADC DMA (Single-ADC mode) and disables ADC peripheral
mbed_official 235:685d5f11838f 847 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 848 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 849 * @retval HAL status
mbed_official 235:685d5f11838f 850 */
mbed_official 235:685d5f11838f 851 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 852 {
mbed_official 235:685d5f11838f 853 /* Disable the Periphral */
mbed_official 235:685d5f11838f 854 __HAL_ADC_DISABLE(hadc);
mbed_official 235:685d5f11838f 855
mbed_official 235:685d5f11838f 856 /* Disable ADC overrun interrupt */
mbed_official 235:685d5f11838f 857 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
mbed_official 235:685d5f11838f 858
mbed_official 235:685d5f11838f 859 /* Disable the selected ADC DMA mode */
mbed_official 235:685d5f11838f 860 hadc->Instance->CR2 &= ~ADC_CR2_DMA;
mbed_official 235:685d5f11838f 861
mbed_official 235:685d5f11838f 862 /* Disable the ADC DMA Stream */
mbed_official 235:685d5f11838f 863 HAL_DMA_Abort(hadc->DMA_Handle);
mbed_official 235:685d5f11838f 864
mbed_official 235:685d5f11838f 865 /* Change ADC state */
mbed_official 235:685d5f11838f 866 hadc->State = HAL_ADC_STATE_READY;
mbed_official 235:685d5f11838f 867
mbed_official 235:685d5f11838f 868 /* Return function status */
mbed_official 235:685d5f11838f 869 return HAL_OK;
mbed_official 235:685d5f11838f 870 }
mbed_official 235:685d5f11838f 871
mbed_official 235:685d5f11838f 872 /**
mbed_official 235:685d5f11838f 873 * @brief Gets the converted value from data register of regular channel.
mbed_official 235:685d5f11838f 874 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 875 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 876 * @retval Converted value
mbed_official 235:685d5f11838f 877 */
mbed_official 235:685d5f11838f 878 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 879 {
mbed_official 235:685d5f11838f 880 /* Return the selected ADC converted value */
mbed_official 235:685d5f11838f 881 return hadc->Instance->DR;
mbed_official 235:685d5f11838f 882 }
mbed_official 235:685d5f11838f 883
mbed_official 235:685d5f11838f 884 /**
mbed_official 235:685d5f11838f 885 * @brief Regular conversion complete callback in non blocking mode
mbed_official 235:685d5f11838f 886 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 887 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 888 * @retval None
mbed_official 235:685d5f11838f 889 */
mbed_official 235:685d5f11838f 890 __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 891 {
mbed_official 235:685d5f11838f 892 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 893 the HAL_ADC_ConvCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 894 */
mbed_official 235:685d5f11838f 895 }
mbed_official 235:685d5f11838f 896
mbed_official 235:685d5f11838f 897 /**
mbed_official 235:685d5f11838f 898 * @brief Regular conversion half DMA transfer callback in non blocking mode
mbed_official 235:685d5f11838f 899 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 900 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 901 * @retval None
mbed_official 235:685d5f11838f 902 */
mbed_official 235:685d5f11838f 903 __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 904 {
mbed_official 235:685d5f11838f 905 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 906 the HAL_ADC_ConvHalfCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 907 */
mbed_official 235:685d5f11838f 908 }
mbed_official 235:685d5f11838f 909
mbed_official 235:685d5f11838f 910 /**
mbed_official 235:685d5f11838f 911 * @brief Analog watchdog callback in non blocking mode
mbed_official 235:685d5f11838f 912 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 913 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 914 * @retval None
mbed_official 235:685d5f11838f 915 */
mbed_official 235:685d5f11838f 916 __weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 917 {
mbed_official 235:685d5f11838f 918 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 919 the HAL_ADC_LevelOoutOfWindowCallback could be implemented in the user file
mbed_official 235:685d5f11838f 920 */
mbed_official 235:685d5f11838f 921 }
mbed_official 235:685d5f11838f 922
mbed_official 235:685d5f11838f 923 /**
mbed_official 235:685d5f11838f 924 * @brief Error ADC callback.
mbed_official 235:685d5f11838f 925 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 926 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 927 * @retval None
mbed_official 235:685d5f11838f 928 */
mbed_official 235:685d5f11838f 929 __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
mbed_official 235:685d5f11838f 930 {
mbed_official 235:685d5f11838f 931 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 932 the HAL_ADC_ErrorCallback could be implemented in the user file
mbed_official 235:685d5f11838f 933 */
mbed_official 235:685d5f11838f 934 }
mbed_official 235:685d5f11838f 935
mbed_official 235:685d5f11838f 936 /**
mbed_official 235:685d5f11838f 937 * @}
mbed_official 235:685d5f11838f 938 */
mbed_official 235:685d5f11838f 939
mbed_official 235:685d5f11838f 940 /** @defgroup ADC_Group3 Peripheral Control functions
mbed_official 235:685d5f11838f 941 * @brief Peripheral Control functions
mbed_official 235:685d5f11838f 942 *
mbed_official 235:685d5f11838f 943 @verbatim
mbed_official 235:685d5f11838f 944 ===============================================================================
mbed_official 235:685d5f11838f 945 ##### Peripheral Control functions #####
mbed_official 235:685d5f11838f 946 ===============================================================================
mbed_official 235:685d5f11838f 947 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 948 (+) Configure regular channels.
mbed_official 235:685d5f11838f 949 (+) Configure injected channels.
mbed_official 235:685d5f11838f 950 (+) Configure multimode.
mbed_official 235:685d5f11838f 951 (+) Configure the analog watch dog.
mbed_official 235:685d5f11838f 952
mbed_official 235:685d5f11838f 953 @endverbatim
mbed_official 235:685d5f11838f 954 * @{
mbed_official 235:685d5f11838f 955 */
mbed_official 235:685d5f11838f 956
mbed_official 235:685d5f11838f 957 /**
mbed_official 235:685d5f11838f 958 * @brief Configures for the selected ADC regular channel its corresponding
mbed_official 235:685d5f11838f 959 * rank in the sequencer and its sample time.
mbed_official 235:685d5f11838f 960 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 961 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 962 * @param sConfig: ADC configuration structure.
mbed_official 235:685d5f11838f 963 * @retval HAL status
mbed_official 235:685d5f11838f 964 */
mbed_official 235:685d5f11838f 965 HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig)
mbed_official 235:685d5f11838f 966 {
mbed_official 235:685d5f11838f 967 /* Check the parameters */
mbed_official 235:685d5f11838f 968 assert_param(IS_ADC_CHANNEL(sConfig->Channel));
mbed_official 235:685d5f11838f 969 assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank));
mbed_official 235:685d5f11838f 970 assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));
mbed_official 235:685d5f11838f 971
mbed_official 235:685d5f11838f 972 /* Process locked */
mbed_official 235:685d5f11838f 973 __HAL_LOCK(hadc);
mbed_official 235:685d5f11838f 974
mbed_official 235:685d5f11838f 975 /* if ADC_Channel_10 ... ADC_Channel_18 is selected */
mbed_official 235:685d5f11838f 976 if (sConfig->Channel > ADC_CHANNEL_9)
mbed_official 235:685d5f11838f 977 {
mbed_official 235:685d5f11838f 978 /* Clear the old sample time */
mbed_official 235:685d5f11838f 979 hadc->Instance->SMPR1 &= ~__HAL_ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel);
mbed_official 235:685d5f11838f 980
mbed_official 235:685d5f11838f 981 /* Set the new sample time */
mbed_official 235:685d5f11838f 982 hadc->Instance->SMPR1 |= __HAL_ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel);
mbed_official 235:685d5f11838f 983 }
mbed_official 235:685d5f11838f 984 else /* ADC_Channel include in ADC_Channel_[0..9] */
mbed_official 235:685d5f11838f 985 {
mbed_official 235:685d5f11838f 986 /* Clear the old sample time */
mbed_official 235:685d5f11838f 987 hadc->Instance->SMPR2 &= ~__HAL_ADC_SMPR2(ADC_SMPR2_SMP0, sConfig->Channel);
mbed_official 235:685d5f11838f 988
mbed_official 235:685d5f11838f 989 /* Set the new sample time */
mbed_official 235:685d5f11838f 990 hadc->Instance->SMPR2 |= __HAL_ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel);
mbed_official 235:685d5f11838f 991 }
mbed_official 235:685d5f11838f 992
mbed_official 235:685d5f11838f 993 /* For Rank 1 to 6 */
mbed_official 235:685d5f11838f 994 if (sConfig->Rank < 7)
mbed_official 235:685d5f11838f 995 {
mbed_official 235:685d5f11838f 996 /* Clear the old SQx bits for the selected rank */
mbed_official 235:685d5f11838f 997 hadc->Instance->SQR3 &= ~__HAL_ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank);
mbed_official 235:685d5f11838f 998
mbed_official 235:685d5f11838f 999 /* Set the SQx bits for the selected rank */
mbed_official 235:685d5f11838f 1000 hadc->Instance->SQR3 |= __HAL_ADC_SQR3_RK(sConfig->Channel, sConfig->Rank);
mbed_official 235:685d5f11838f 1001 }
mbed_official 235:685d5f11838f 1002 /* For Rank 7 to 12 */
mbed_official 235:685d5f11838f 1003 else if (sConfig->Rank < 13)
mbed_official 235:685d5f11838f 1004 {
mbed_official 235:685d5f11838f 1005 /* Clear the old SQx bits for the selected rank */
mbed_official 235:685d5f11838f 1006 hadc->Instance->SQR2 &= ~__HAL_ADC_SQR2_RK(ADC_SQR2_SQ7, sConfig->Rank);
mbed_official 235:685d5f11838f 1007
mbed_official 235:685d5f11838f 1008 /* Set the SQx bits for the selected rank */
mbed_official 235:685d5f11838f 1009 hadc->Instance->SQR2 |= __HAL_ADC_SQR2_RK(sConfig->Channel, sConfig->Rank);
mbed_official 235:685d5f11838f 1010 }
mbed_official 235:685d5f11838f 1011 /* For Rank 13 to 16 */
mbed_official 235:685d5f11838f 1012 else
mbed_official 235:685d5f11838f 1013 {
mbed_official 235:685d5f11838f 1014 /* Clear the old SQx bits for the selected rank */
mbed_official 235:685d5f11838f 1015 hadc->Instance->SQR1 &= ~__HAL_ADC_SQR1_RK(ADC_SQR1_SQ13, sConfig->Rank);
mbed_official 235:685d5f11838f 1016
mbed_official 235:685d5f11838f 1017 /* Set the SQx bits for the selected rank */
mbed_official 235:685d5f11838f 1018 hadc->Instance->SQR1 |= __HAL_ADC_SQR1_RK(sConfig->Channel, sConfig->Rank);
mbed_official 235:685d5f11838f 1019 }
mbed_official 235:685d5f11838f 1020
mbed_official 235:685d5f11838f 1021 /* if ADC1 Channel_18 is selected enable VBAT Channel */
mbed_official 235:685d5f11838f 1022 if ((hadc->Instance == ADC1) && (sConfig->Channel == ADC_CHANNEL_VBAT))
mbed_official 235:685d5f11838f 1023 {
mbed_official 235:685d5f11838f 1024 /* Enable the VBAT channel*/
mbed_official 235:685d5f11838f 1025 ADC->CCR |= ADC_CCR_VBATE;
mbed_official 235:685d5f11838f 1026 }
mbed_official 235:685d5f11838f 1027
mbed_official 235:685d5f11838f 1028 /* if ADC1 Channel_16 or Channel_17 is selected enable TSVREFE Channel(Temperature sensor and VREFINT) */
mbed_official 235:685d5f11838f 1029 if ((hadc->Instance == ADC1) && ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || (sConfig->Channel == ADC_CHANNEL_VREFINT)))
mbed_official 235:685d5f11838f 1030 {
mbed_official 235:685d5f11838f 1031 /* Enable the TSVREFE channel*/
mbed_official 235:685d5f11838f 1032 ADC->CCR |= ADC_CCR_TSVREFE;
mbed_official 235:685d5f11838f 1033 }
mbed_official 235:685d5f11838f 1034
mbed_official 235:685d5f11838f 1035 /* Process unlocked */
mbed_official 235:685d5f11838f 1036 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 1037
mbed_official 235:685d5f11838f 1038 /* Return function status */
mbed_official 235:685d5f11838f 1039 return HAL_OK;
mbed_official 235:685d5f11838f 1040 }
mbed_official 235:685d5f11838f 1041
mbed_official 235:685d5f11838f 1042 /**
mbed_official 235:685d5f11838f 1043 * @brief Configures the analog watchdog.
mbed_official 235:685d5f11838f 1044 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1045 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 1046 * @param AnalogWDGConfig : pointer to an ADC_AnalogWDGConfTypeDef structure
mbed_official 235:685d5f11838f 1047 * that contains the configuration information of ADC analog watchdog.
mbed_official 235:685d5f11838f 1048 * @retval HAL status
mbed_official 235:685d5f11838f 1049 */
mbed_official 235:685d5f11838f 1050 HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef* hadc, ADC_AnalogWDGConfTypeDef* AnalogWDGConfig)
mbed_official 235:685d5f11838f 1051 {
mbed_official 235:685d5f11838f 1052 #ifdef USE_FULL_ASSERT
mbed_official 235:685d5f11838f 1053 uint32_t tmp = 0;
mbed_official 235:685d5f11838f 1054 #endif /* USE_FULL_ASSERT */
mbed_official 235:685d5f11838f 1055
mbed_official 235:685d5f11838f 1056 /* Check the parameters */
mbed_official 235:685d5f11838f 1057 assert_param(IS_ADC_ANALOG_WATCHDOG(AnalogWDGConfig->WatchdogMode));
mbed_official 235:685d5f11838f 1058 assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));
mbed_official 235:685d5f11838f 1059 assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));
mbed_official 235:685d5f11838f 1060
mbed_official 235:685d5f11838f 1061 #ifdef USE_FULL_ASSERT
mbed_official 235:685d5f11838f 1062 tmp = __HAL_ADC_GET_RESOLUTION(hadc);
mbed_official 235:685d5f11838f 1063 assert_param(IS_ADC_RANGE(tmp, AnalogWDGConfig->HighThreshold));
mbed_official 235:685d5f11838f 1064 assert_param(IS_ADC_RANGE(tmp, AnalogWDGConfig->LowThreshold));
mbed_official 235:685d5f11838f 1065 #endif /* USE_FULL_ASSERT */
mbed_official 235:685d5f11838f 1066
mbed_official 235:685d5f11838f 1067 /* Process locked */
mbed_official 235:685d5f11838f 1068 __HAL_LOCK(hadc);
mbed_official 235:685d5f11838f 1069
mbed_official 235:685d5f11838f 1070 if(AnalogWDGConfig->ITMode == ENABLE)
mbed_official 235:685d5f11838f 1071 {
mbed_official 235:685d5f11838f 1072 /* Enable the ADC Analog watchdog interrupt */
mbed_official 235:685d5f11838f 1073 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD);
mbed_official 235:685d5f11838f 1074 }
mbed_official 235:685d5f11838f 1075 else
mbed_official 235:685d5f11838f 1076 {
mbed_official 235:685d5f11838f 1077 /* Disable the ADC Analog watchdog interrupt */
mbed_official 235:685d5f11838f 1078 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD);
mbed_official 235:685d5f11838f 1079 }
mbed_official 235:685d5f11838f 1080
mbed_official 235:685d5f11838f 1081 /* Clear AWDEN, JAWDEN and AWDSGL bits */
mbed_official 235:685d5f11838f 1082 hadc->Instance->CR1 &= ~(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN | ADC_CR1_AWDEN);
mbed_official 235:685d5f11838f 1083
mbed_official 235:685d5f11838f 1084 /* Set the analog watchdog enable mode */
mbed_official 235:685d5f11838f 1085 hadc->Instance->CR1 |= AnalogWDGConfig->WatchdogMode;
mbed_official 235:685d5f11838f 1086
mbed_official 235:685d5f11838f 1087 /* Set the high threshold */
mbed_official 235:685d5f11838f 1088 hadc->Instance->HTR = AnalogWDGConfig->HighThreshold;
mbed_official 235:685d5f11838f 1089
mbed_official 235:685d5f11838f 1090 /* Set the low threshold */
mbed_official 235:685d5f11838f 1091 hadc->Instance->LTR = AnalogWDGConfig->LowThreshold;
mbed_official 235:685d5f11838f 1092
mbed_official 235:685d5f11838f 1093 /* Clear the Analog watchdog channel select bits */
mbed_official 235:685d5f11838f 1094 hadc->Instance->CR1 &= ~ADC_CR1_AWDCH;
mbed_official 235:685d5f11838f 1095
mbed_official 235:685d5f11838f 1096 /* Set the Analog watchdog channel */
mbed_official 235:685d5f11838f 1097 hadc->Instance->CR1 |= AnalogWDGConfig->Channel;
mbed_official 235:685d5f11838f 1098
mbed_official 235:685d5f11838f 1099 /* Process unlocked */
mbed_official 235:685d5f11838f 1100 __HAL_UNLOCK(hadc);
mbed_official 235:685d5f11838f 1101
mbed_official 235:685d5f11838f 1102 /* Return function status */
mbed_official 235:685d5f11838f 1103 return HAL_OK;
mbed_official 235:685d5f11838f 1104 }
mbed_official 235:685d5f11838f 1105
mbed_official 235:685d5f11838f 1106 /**
mbed_official 235:685d5f11838f 1107 * @}
mbed_official 235:685d5f11838f 1108 */
mbed_official 235:685d5f11838f 1109
mbed_official 235:685d5f11838f 1110 /** @defgroup ADC_Group4 ADC Peripheral State functions
mbed_official 235:685d5f11838f 1111 * @brief ADC Peripheral State functions
mbed_official 235:685d5f11838f 1112 *
mbed_official 235:685d5f11838f 1113 @verbatim
mbed_official 235:685d5f11838f 1114 ===============================================================================
mbed_official 235:685d5f11838f 1115 ##### Peripheral State and errors functions #####
mbed_official 235:685d5f11838f 1116 ===============================================================================
mbed_official 235:685d5f11838f 1117 [..]
mbed_official 235:685d5f11838f 1118 This subsection provides functions allowing to
mbed_official 235:685d5f11838f 1119 (+) Check the ADC state
mbed_official 235:685d5f11838f 1120 (+) Check the ADC Error
mbed_official 235:685d5f11838f 1121
mbed_official 235:685d5f11838f 1122 @endverbatim
mbed_official 235:685d5f11838f 1123 * @{
mbed_official 235:685d5f11838f 1124 */
mbed_official 235:685d5f11838f 1125
mbed_official 235:685d5f11838f 1126 /**
mbed_official 235:685d5f11838f 1127 * @brief return the ADC state
mbed_official 235:685d5f11838f 1128 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1129 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 1130 * @retval HAL state
mbed_official 235:685d5f11838f 1131 */
mbed_official 235:685d5f11838f 1132 HAL_ADC_StateTypeDef HAL_ADC_GetState(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 1133 {
mbed_official 235:685d5f11838f 1134 /* Return ADC state */
mbed_official 235:685d5f11838f 1135 return hadc->State;
mbed_official 235:685d5f11838f 1136 }
mbed_official 235:685d5f11838f 1137
mbed_official 235:685d5f11838f 1138 /**
mbed_official 235:685d5f11838f 1139 * @brief Return the ADC error code
mbed_official 235:685d5f11838f 1140 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1141 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 1142 * @retval ADC Error Code
mbed_official 235:685d5f11838f 1143 */
mbed_official 235:685d5f11838f 1144 uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc)
mbed_official 235:685d5f11838f 1145 {
mbed_official 235:685d5f11838f 1146 return hadc->ErrorCode;
mbed_official 235:685d5f11838f 1147 }
mbed_official 235:685d5f11838f 1148
mbed_official 235:685d5f11838f 1149 /**
mbed_official 235:685d5f11838f 1150 * @}
mbed_official 235:685d5f11838f 1151 */
mbed_official 235:685d5f11838f 1152
mbed_official 235:685d5f11838f 1153 /**
mbed_official 235:685d5f11838f 1154 * @brief Initializes the ADCx peripheral according to the specified parameters
mbed_official 235:685d5f11838f 1155 * in the ADC_InitStruct without initializing the ADC MSP.
mbed_official 235:685d5f11838f 1156 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1157 * the configuration information for the specified ADC.
mbed_official 235:685d5f11838f 1158 * @retval None
mbed_official 235:685d5f11838f 1159 */
mbed_official 235:685d5f11838f 1160 static void ADC_Init(ADC_HandleTypeDef* hadc)
mbed_official 235:685d5f11838f 1161 {
mbed_official 235:685d5f11838f 1162
mbed_official 235:685d5f11838f 1163 /* Set ADC parameters */
mbed_official 235:685d5f11838f 1164 /* Set the ADC clock prescaler */
mbed_official 235:685d5f11838f 1165 ADC->CCR &= ~(ADC_CCR_ADCPRE);
mbed_official 235:685d5f11838f 1166 ADC->CCR |= hadc->Init.ClockPrescaler;
mbed_official 235:685d5f11838f 1167
mbed_official 235:685d5f11838f 1168 /* Set ADC scan mode */
mbed_official 235:685d5f11838f 1169 hadc->Instance->CR1 &= ~(ADC_CR1_SCAN);
mbed_official 235:685d5f11838f 1170 hadc->Instance->CR1 |= __HAL_ADC_CR1_SCANCONV(hadc->Init.ScanConvMode);
mbed_official 235:685d5f11838f 1171
mbed_official 235:685d5f11838f 1172 /* Set ADC resolution */
mbed_official 235:685d5f11838f 1173 hadc->Instance->CR1 &= ~(ADC_CR1_RES);
mbed_official 235:685d5f11838f 1174 hadc->Instance->CR1 |= hadc->Init.Resolution;
mbed_official 235:685d5f11838f 1175
mbed_official 235:685d5f11838f 1176 /* Set ADC data alignment */
mbed_official 235:685d5f11838f 1177 hadc->Instance->CR2 &= ~(ADC_CR2_ALIGN);
mbed_official 235:685d5f11838f 1178 hadc->Instance->CR2 |= hadc->Init.DataAlign;
mbed_official 235:685d5f11838f 1179
mbed_official 235:685d5f11838f 1180 /* Select external trigger to start conversion */
mbed_official 235:685d5f11838f 1181 hadc->Instance->CR2 &= ~(ADC_CR2_EXTSEL);
mbed_official 235:685d5f11838f 1182 hadc->Instance->CR2 |= hadc->Init.ExternalTrigConv;
mbed_official 235:685d5f11838f 1183
mbed_official 235:685d5f11838f 1184 /* Select external trigger polarity */
mbed_official 235:685d5f11838f 1185 hadc->Instance->CR2 &= ~(ADC_CR2_EXTEN);
mbed_official 235:685d5f11838f 1186 hadc->Instance->CR2 |= hadc->Init.ExternalTrigConvEdge;
mbed_official 235:685d5f11838f 1187
mbed_official 235:685d5f11838f 1188 /* Enable or disable ADC continuous conversion mode */
mbed_official 235:685d5f11838f 1189 hadc->Instance->CR2 &= ~(ADC_CR2_CONT);
mbed_official 235:685d5f11838f 1190 hadc->Instance->CR2 |= __HAL_ADC_CR2_CONTINUOUS(hadc->Init.ContinuousConvMode);
mbed_official 235:685d5f11838f 1191
mbed_official 235:685d5f11838f 1192 if (hadc->Init.DiscontinuousConvMode != DISABLE)
mbed_official 235:685d5f11838f 1193 {
mbed_official 235:685d5f11838f 1194 assert_param(IS_ADC_REGULAR_DISC_NUMBER(hadc->Init.NbrOfDiscConversion));
mbed_official 235:685d5f11838f 1195
mbed_official 235:685d5f11838f 1196 /* Enable the selected ADC regular discontinuous mode */
mbed_official 235:685d5f11838f 1197 hadc->Instance->CR1 |= (uint32_t)ADC_CR1_DISCEN;
mbed_official 235:685d5f11838f 1198
mbed_official 235:685d5f11838f 1199 /* Set the number of channels to be converted in discontinuous mode */
mbed_official 235:685d5f11838f 1200 hadc->Instance->CR1 &= ~(ADC_CR1_DISCNUM);
mbed_official 235:685d5f11838f 1201 hadc->Instance->CR1 |= __HAL_ADC_CR1_DISCONTINUOUS(hadc->Init.NbrOfDiscConversion);
mbed_official 235:685d5f11838f 1202 }
mbed_official 235:685d5f11838f 1203 else
mbed_official 235:685d5f11838f 1204 {
mbed_official 235:685d5f11838f 1205 /* Disable the selected ADC regular discontinuous mode */
mbed_official 235:685d5f11838f 1206 hadc->Instance->CR1 &= ~(ADC_CR1_DISCEN);
mbed_official 235:685d5f11838f 1207 }
mbed_official 235:685d5f11838f 1208
mbed_official 235:685d5f11838f 1209 /* Set ADC number of conversion */
mbed_official 235:685d5f11838f 1210 hadc->Instance->SQR1 &= ~(ADC_SQR1_L);
mbed_official 235:685d5f11838f 1211 hadc->Instance->SQR1 |= __HAL_ADC_SQR1(hadc->Init.NbrOfConversion);
mbed_official 235:685d5f11838f 1212
mbed_official 235:685d5f11838f 1213 /* Enable or disable ADC DMA continuous request */
mbed_official 235:685d5f11838f 1214 hadc->Instance->CR2 &= ~(ADC_CR2_DDS);
mbed_official 235:685d5f11838f 1215 hadc->Instance->CR2 |= __HAL_ADC_CR2_DMAContReq(hadc->Init.DMAContinuousRequests);
mbed_official 235:685d5f11838f 1216
mbed_official 235:685d5f11838f 1217 /* Enable or disable ADC end of conversion selection */
mbed_official 235:685d5f11838f 1218 hadc->Instance->CR2 &= ~(ADC_CR2_EOCS);
mbed_official 235:685d5f11838f 1219 hadc->Instance->CR2 |= __HAL_ADC_CR2_EOCSelection(hadc->Init.EOCSelection);
mbed_official 235:685d5f11838f 1220 }
mbed_official 235:685d5f11838f 1221
mbed_official 235:685d5f11838f 1222 /**
mbed_official 235:685d5f11838f 1223 * @brief DMA transfer complete callback.
mbed_official 235:685d5f11838f 1224 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1225 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1226 * @retval None
mbed_official 235:685d5f11838f 1227 */
mbed_official 235:685d5f11838f 1228 static void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1229 {
mbed_official 235:685d5f11838f 1230 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1231
mbed_official 235:685d5f11838f 1232 /* Check if an injected conversion is ready */
mbed_official 235:685d5f11838f 1233 if(hadc->State == HAL_ADC_STATE_EOC_INJ)
mbed_official 235:685d5f11838f 1234 {
mbed_official 235:685d5f11838f 1235 /* Change ADC state */
mbed_official 235:685d5f11838f 1236 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 235:685d5f11838f 1237 }
mbed_official 235:685d5f11838f 1238 else
mbed_official 235:685d5f11838f 1239 {
mbed_official 235:685d5f11838f 1240 /* Change ADC state */
mbed_official 235:685d5f11838f 1241 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 235:685d5f11838f 1242 }
mbed_official 235:685d5f11838f 1243
mbed_official 235:685d5f11838f 1244 HAL_ADC_ConvCpltCallback(hadc);
mbed_official 235:685d5f11838f 1245 }
mbed_official 235:685d5f11838f 1246
mbed_official 235:685d5f11838f 1247 /**
mbed_official 235:685d5f11838f 1248 * @brief DMA half transfer complete callback.
mbed_official 235:685d5f11838f 1249 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1250 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1251 * @retval None
mbed_official 235:685d5f11838f 1252 */
mbed_official 235:685d5f11838f 1253 static void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1254 {
mbed_official 235:685d5f11838f 1255 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1256 /* Conversion complete callback */
mbed_official 235:685d5f11838f 1257 HAL_ADC_ConvHalfCpltCallback(hadc);
mbed_official 235:685d5f11838f 1258 }
mbed_official 235:685d5f11838f 1259
mbed_official 235:685d5f11838f 1260 /**
mbed_official 235:685d5f11838f 1261 * @brief DMA error callback
mbed_official 235:685d5f11838f 1262 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1263 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1264 * @retval None
mbed_official 235:685d5f11838f 1265 */
mbed_official 235:685d5f11838f 1266 static void ADC_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1267 {
mbed_official 235:685d5f11838f 1268 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1269 hadc->State= HAL_ADC_STATE_ERROR;
mbed_official 235:685d5f11838f 1270 /* Set ADC error code to DMA error */
mbed_official 235:685d5f11838f 1271 hadc->ErrorCode |= HAL_ADC_ERROR_DMA;
mbed_official 235:685d5f11838f 1272 HAL_ADC_ErrorCallback(hadc);
mbed_official 235:685d5f11838f 1273 }
mbed_official 235:685d5f11838f 1274
mbed_official 235:685d5f11838f 1275
mbed_official 235:685d5f11838f 1276 /**
mbed_official 235:685d5f11838f 1277 * @}
mbed_official 235:685d5f11838f 1278 */
mbed_official 235:685d5f11838f 1279
mbed_official 235:685d5f11838f 1280 #endif /* HAL_ADC_MODULE_ENABLED */
mbed_official 235:685d5f11838f 1281 /**
mbed_official 235:685d5f11838f 1282 * @}
mbed_official 235:685d5f11838f 1283 */
mbed_official 235:685d5f11838f 1284
mbed_official 235:685d5f11838f 1285 /**
mbed_official 235:685d5f11838f 1286 * @}
mbed_official 235:685d5f11838f 1287 */
mbed_official 235:685d5f11838f 1288
mbed_official 235:685d5f11838f 1289 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/