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:
Thu Jul 02 16:30:08 2015 +0100
Revision:
581:39197bcd20f2
Parent:
532:fe11edbda85c
Child:
613:bc40b8d2aec4
Synchronized with git revision ae2d3cdffe70184eb8736d94f76c45c93f4b7724

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

Make it possible to build the core mbed library with yotta

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