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:
Fri Jun 19 09:15:11 2015 +0100
Revision:
573:ad23fe03a082
Child:
610:813dcc80987e
Synchronized with git revision d47834cd4d729e5b36b4c1ad4650f8b8f6a9ab86

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

DISCO_F746NG - Add new target

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 573:ad23fe03a082 1 /**
mbed_official 573:ad23fe03a082 2 ******************************************************************************
mbed_official 573:ad23fe03a082 3 * @file stm32f7xx_hal_adc_ex.c
mbed_official 573:ad23fe03a082 4 * @author MCD Application Team
mbed_official 573:ad23fe03a082 5 * @version V1.0.0
mbed_official 573:ad23fe03a082 6 * @date 12-May-2015
mbed_official 573:ad23fe03a082 7 * @brief This file provides firmware functions to manage the following
mbed_official 573:ad23fe03a082 8 * functionalities of the ADC extension peripheral:
mbed_official 573:ad23fe03a082 9 * + Extended features functions
mbed_official 573:ad23fe03a082 10 *
mbed_official 573:ad23fe03a082 11 @verbatim
mbed_official 573:ad23fe03a082 12 ==============================================================================
mbed_official 573:ad23fe03a082 13 ##### How to use this driver #####
mbed_official 573:ad23fe03a082 14 ==============================================================================
mbed_official 573:ad23fe03a082 15 [..]
mbed_official 573:ad23fe03a082 16 (#)Initialize the ADC low level resources by implementing the HAL_ADC_MspInit():
mbed_official 573:ad23fe03a082 17 (##) Enable the ADC interface clock using __HAL_RCC_ADC_CLK_ENABLE()
mbed_official 573:ad23fe03a082 18 (##) ADC pins configuration
mbed_official 573:ad23fe03a082 19 (+++) Enable the clock for the ADC GPIOs using the following function:
mbed_official 573:ad23fe03a082 20 __HAL_RCC_GPIOx_CLK_ENABLE()
mbed_official 573:ad23fe03a082 21 (+++) Configure these ADC pins in analog mode using HAL_GPIO_Init()
mbed_official 573:ad23fe03a082 22 (##) In case of using interrupts (e.g. HAL_ADC_Start_IT())
mbed_official 573:ad23fe03a082 23 (+++) Configure the ADC interrupt priority using HAL_NVIC_SetPriority()
mbed_official 573:ad23fe03a082 24 (+++) Enable the ADC IRQ handler using HAL_NVIC_EnableIRQ()
mbed_official 573:ad23fe03a082 25 (+++) In ADC IRQ handler, call HAL_ADC_IRQHandler()
mbed_official 573:ad23fe03a082 26 (##) In case of using DMA to control data transfer (e.g. HAL_ADC_Start_DMA())
mbed_official 573:ad23fe03a082 27 (+++) Enable the DMAx interface clock using __HAL_RCC_DMAx_CLK_ENABLE()
mbed_official 573:ad23fe03a082 28 (+++) Configure and enable two DMA streams stream for managing data
mbed_official 573:ad23fe03a082 29 transfer from peripheral to memory (output stream)
mbed_official 573:ad23fe03a082 30 (+++) Associate the initialized DMA handle to the ADC DMA handle
mbed_official 573:ad23fe03a082 31 using __HAL_LINKDMA()
mbed_official 573:ad23fe03a082 32 (+++) Configure the priority and enable the NVIC for the transfer complete
mbed_official 573:ad23fe03a082 33 interrupt on the two DMA Streams. The output stream should have higher
mbed_official 573:ad23fe03a082 34 priority than the input stream.
mbed_official 573:ad23fe03a082 35 (#) Configure the ADC Prescaler, conversion resolution and data alignment
mbed_official 573:ad23fe03a082 36 using the HAL_ADC_Init() function.
mbed_official 573:ad23fe03a082 37
mbed_official 573:ad23fe03a082 38 (#) Configure the ADC Injected channels group features, use HAL_ADC_Init()
mbed_official 573:ad23fe03a082 39 and HAL_ADC_ConfigChannel() functions.
mbed_official 573:ad23fe03a082 40
mbed_official 573:ad23fe03a082 41 (#) Three operation modes are available within this driver :
mbed_official 573:ad23fe03a082 42
mbed_official 573:ad23fe03a082 43 *** Polling mode IO operation ***
mbed_official 573:ad23fe03a082 44 =================================
mbed_official 573:ad23fe03a082 45 [..]
mbed_official 573:ad23fe03a082 46 (+) Start the ADC peripheral using HAL_ADCEx_InjectedStart()
mbed_official 573:ad23fe03a082 47 (+) Wait for end of conversion using HAL_ADC_PollForConversion(), at this stage
mbed_official 573:ad23fe03a082 48 user can specify the value of timeout according to his end application
mbed_official 573:ad23fe03a082 49 (+) To read the ADC converted values, use the HAL_ADCEx_InjectedGetValue() function.
mbed_official 573:ad23fe03a082 50 (+) Stop the ADC peripheral using HAL_ADCEx_InjectedStop()
mbed_official 573:ad23fe03a082 51
mbed_official 573:ad23fe03a082 52 *** Interrupt mode IO operation ***
mbed_official 573:ad23fe03a082 53 ===================================
mbed_official 573:ad23fe03a082 54 [..]
mbed_official 573:ad23fe03a082 55 (+) Start the ADC peripheral using HAL_ADCEx_InjectedStart_IT()
mbed_official 573:ad23fe03a082 56 (+) Use HAL_ADC_IRQHandler() called under ADC_IRQHandler() Interrupt subroutine
mbed_official 573:ad23fe03a082 57 (+) At ADC end of conversion HAL_ADCEx_InjectedConvCpltCallback() function is executed and user can
mbed_official 573:ad23fe03a082 58 add his own code by customization of function pointer HAL_ADCEx_InjectedConvCpltCallback
mbed_official 573:ad23fe03a082 59 (+) In case of ADC Error, HAL_ADCEx_InjectedErrorCallback() function is executed and user can
mbed_official 573:ad23fe03a082 60 add his own code by customization of function pointer HAL_ADCEx_InjectedErrorCallback
mbed_official 573:ad23fe03a082 61 (+) Stop the ADC peripheral using HAL_ADCEx_InjectedStop_IT()
mbed_official 573:ad23fe03a082 62
mbed_official 573:ad23fe03a082 63
mbed_official 573:ad23fe03a082 64 *** DMA mode IO operation ***
mbed_official 573:ad23fe03a082 65 ==============================
mbed_official 573:ad23fe03a082 66 [..]
mbed_official 573:ad23fe03a082 67 (+) Start the ADC peripheral using HAL_ADCEx_InjectedStart_DMA(), at this stage the user specify the length
mbed_official 573:ad23fe03a082 68 of data to be transferred at each end of conversion
mbed_official 573:ad23fe03a082 69 (+) At The end of data transfer ba HAL_ADCEx_InjectedConvCpltCallback() function is executed and user can
mbed_official 573:ad23fe03a082 70 add his own code by customization of function pointer HAL_ADCEx_InjectedConvCpltCallback
mbed_official 573:ad23fe03a082 71 (+) In case of transfer Error, HAL_ADCEx_InjectedErrorCallback() function is executed and user can
mbed_official 573:ad23fe03a082 72 add his own code by customization of function pointer HAL_ADCEx_InjectedErrorCallback
mbed_official 573:ad23fe03a082 73 (+) Stop the ADC peripheral using HAL_ADCEx_InjectedStop_DMA()
mbed_official 573:ad23fe03a082 74
mbed_official 573:ad23fe03a082 75 *** Multi mode ADCs Regular channels configuration ***
mbed_official 573:ad23fe03a082 76 ======================================================
mbed_official 573:ad23fe03a082 77 [..]
mbed_official 573:ad23fe03a082 78 (+) Select the Multi mode ADC regular channels features (dual or triple mode)
mbed_official 573:ad23fe03a082 79 and configure the DMA mode using HAL_ADCEx_MultiModeConfigChannel() functions.
mbed_official 573:ad23fe03a082 80 (+) Start the ADC peripheral using HAL_ADCEx_MultiModeStart_DMA(), at this stage the user specify the length
mbed_official 573:ad23fe03a082 81 of data to be transferred at each end of conversion
mbed_official 573:ad23fe03a082 82 (+) Read the ADCs converted values using the HAL_ADCEx_MultiModeGetValue() function.
mbed_official 573:ad23fe03a082 83
mbed_official 573:ad23fe03a082 84
mbed_official 573:ad23fe03a082 85 @endverbatim
mbed_official 573:ad23fe03a082 86 ******************************************************************************
mbed_official 573:ad23fe03a082 87 * @attention
mbed_official 573:ad23fe03a082 88 *
mbed_official 573:ad23fe03a082 89 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 573:ad23fe03a082 90 *
mbed_official 573:ad23fe03a082 91 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 573:ad23fe03a082 92 * are permitted provided that the following conditions are met:
mbed_official 573:ad23fe03a082 93 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 573:ad23fe03a082 94 * this list of conditions and the following disclaimer.
mbed_official 573:ad23fe03a082 95 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 573:ad23fe03a082 96 * this list of conditions and the following disclaimer in the documentation
mbed_official 573:ad23fe03a082 97 * and/or other materials provided with the distribution.
mbed_official 573:ad23fe03a082 98 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 573:ad23fe03a082 99 * may be used to endorse or promote products derived from this software
mbed_official 573:ad23fe03a082 100 * without specific prior written permission.
mbed_official 573:ad23fe03a082 101 *
mbed_official 573:ad23fe03a082 102 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 573:ad23fe03a082 103 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 573:ad23fe03a082 104 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 573:ad23fe03a082 105 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 573:ad23fe03a082 106 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 573:ad23fe03a082 107 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 573:ad23fe03a082 108 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 573:ad23fe03a082 109 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 573:ad23fe03a082 110 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 573:ad23fe03a082 111 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 573:ad23fe03a082 112 *
mbed_official 573:ad23fe03a082 113 ******************************************************************************
mbed_official 573:ad23fe03a082 114 */
mbed_official 573:ad23fe03a082 115
mbed_official 573:ad23fe03a082 116 /* Includes ------------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 117 #include "stm32f7xx_hal.h"
mbed_official 573:ad23fe03a082 118
mbed_official 573:ad23fe03a082 119 /** @addtogroup STM32F7xx_HAL_Driver
mbed_official 573:ad23fe03a082 120 * @{
mbed_official 573:ad23fe03a082 121 */
mbed_official 573:ad23fe03a082 122
mbed_official 573:ad23fe03a082 123 /** @defgroup ADCEx ADCEx
mbed_official 573:ad23fe03a082 124 * @brief ADC Extended driver modules
mbed_official 573:ad23fe03a082 125 * @{
mbed_official 573:ad23fe03a082 126 */
mbed_official 573:ad23fe03a082 127
mbed_official 573:ad23fe03a082 128 #ifdef HAL_ADC_MODULE_ENABLED
mbed_official 573:ad23fe03a082 129
mbed_official 573:ad23fe03a082 130 /* Private typedef -----------------------------------------------------------*/
mbed_official 573:ad23fe03a082 131 /* Private define ------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 132 /* Private macro -------------------------------------------------------------*/
mbed_official 573:ad23fe03a082 133 /* Private variables ---------------------------------------------------------*/
mbed_official 573:ad23fe03a082 134 /* Private function prototypes -----------------------------------------------*/
mbed_official 573:ad23fe03a082 135 /** @addtogroup ADCEx_Private_Functions
mbed_official 573:ad23fe03a082 136 * @{
mbed_official 573:ad23fe03a082 137 */
mbed_official 573:ad23fe03a082 138 static void ADC_MultiModeDMAConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 573:ad23fe03a082 139 static void ADC_MultiModeDMAError(DMA_HandleTypeDef *hdma);
mbed_official 573:ad23fe03a082 140 static void ADC_MultiModeDMAHalfConvCplt(DMA_HandleTypeDef *hdma);
mbed_official 573:ad23fe03a082 141 /**
mbed_official 573:ad23fe03a082 142 * @}
mbed_official 573:ad23fe03a082 143 */
mbed_official 573:ad23fe03a082 144
mbed_official 573:ad23fe03a082 145 /* Exported functions ---------------------------------------------------------*/
mbed_official 573:ad23fe03a082 146 /** @defgroup ADCEx_Exported_Functions ADC Exported Functions
mbed_official 573:ad23fe03a082 147 * @{
mbed_official 573:ad23fe03a082 148 */
mbed_official 573:ad23fe03a082 149
mbed_official 573:ad23fe03a082 150 /** @defgroup ADCEx_Exported_Functions_Group1 Extended features functions
mbed_official 573:ad23fe03a082 151 * @brief Extended features functions
mbed_official 573:ad23fe03a082 152 *
mbed_official 573:ad23fe03a082 153 @verbatim
mbed_official 573:ad23fe03a082 154 ===============================================================================
mbed_official 573:ad23fe03a082 155 ##### Extended features functions #####
mbed_official 573:ad23fe03a082 156 ===============================================================================
mbed_official 573:ad23fe03a082 157 [..] This section provides functions allowing to:
mbed_official 573:ad23fe03a082 158 (+) Start conversion of injected channel.
mbed_official 573:ad23fe03a082 159 (+) Stop conversion of injected channel.
mbed_official 573:ad23fe03a082 160 (+) Start multimode and enable DMA transfer.
mbed_official 573:ad23fe03a082 161 (+) Stop multimode and disable DMA transfer.
mbed_official 573:ad23fe03a082 162 (+) Get result of injected channel conversion.
mbed_official 573:ad23fe03a082 163 (+) Get result of multimode conversion.
mbed_official 573:ad23fe03a082 164 (+) Configure injected channels.
mbed_official 573:ad23fe03a082 165 (+) Configure multimode.
mbed_official 573:ad23fe03a082 166
mbed_official 573:ad23fe03a082 167 @endverbatim
mbed_official 573:ad23fe03a082 168 * @{
mbed_official 573:ad23fe03a082 169 */
mbed_official 573:ad23fe03a082 170
mbed_official 573:ad23fe03a082 171 /**
mbed_official 573:ad23fe03a082 172 * @brief Enables the selected ADC software start conversion of the injected channels.
mbed_official 573:ad23fe03a082 173 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 174 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 175 * @retval HAL status
mbed_official 573:ad23fe03a082 176 */
mbed_official 573:ad23fe03a082 177 HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 178 {
mbed_official 573:ad23fe03a082 179 __IO uint32_t counter = 0;
mbed_official 573:ad23fe03a082 180 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 573:ad23fe03a082 181
mbed_official 573:ad23fe03a082 182 /* Process locked */
mbed_official 573:ad23fe03a082 183 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 184
mbed_official 573:ad23fe03a082 185 /* Check if a regular conversion is ongoing */
mbed_official 573:ad23fe03a082 186 if(hadc->State == HAL_ADC_STATE_BUSY_REG)
mbed_official 573:ad23fe03a082 187 {
mbed_official 573:ad23fe03a082 188 /* Change ADC state */
mbed_official 573:ad23fe03a082 189 hadc->State = HAL_ADC_STATE_BUSY_INJ_REG;
mbed_official 573:ad23fe03a082 190 }
mbed_official 573:ad23fe03a082 191 else
mbed_official 573:ad23fe03a082 192 {
mbed_official 573:ad23fe03a082 193 /* Change ADC state */
mbed_official 573:ad23fe03a082 194 hadc->State = HAL_ADC_STATE_BUSY_INJ;
mbed_official 573:ad23fe03a082 195 }
mbed_official 573:ad23fe03a082 196
mbed_official 573:ad23fe03a082 197 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 573:ad23fe03a082 198 Tstab time the ADC's stabilization */
mbed_official 573:ad23fe03a082 199 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 573:ad23fe03a082 200 {
mbed_official 573:ad23fe03a082 201 /* Enable the Peripheral */
mbed_official 573:ad23fe03a082 202 __HAL_ADC_ENABLE(hadc);
mbed_official 573:ad23fe03a082 203
mbed_official 573:ad23fe03a082 204 /* Delay for temperature sensor stabilization time */
mbed_official 573:ad23fe03a082 205 /* Compute number of CPU cycles to wait for */
mbed_official 573:ad23fe03a082 206 counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000));
mbed_official 573:ad23fe03a082 207 while(counter != 0)
mbed_official 573:ad23fe03a082 208 {
mbed_official 573:ad23fe03a082 209 counter--;
mbed_official 573:ad23fe03a082 210 }
mbed_official 573:ad23fe03a082 211 }
mbed_official 573:ad23fe03a082 212
mbed_official 573:ad23fe03a082 213 /* Check if Multimode enabled */
mbed_official 573:ad23fe03a082 214 if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI))
mbed_official 573:ad23fe03a082 215 {
mbed_official 573:ad23fe03a082 216 tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN);
mbed_official 573:ad23fe03a082 217 tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO);
mbed_official 573:ad23fe03a082 218 if(tmp1 && tmp2)
mbed_official 573:ad23fe03a082 219 {
mbed_official 573:ad23fe03a082 220 /* Enable the selected ADC software conversion for injected group */
mbed_official 573:ad23fe03a082 221 hadc->Instance->CR2 |= ADC_CR2_JSWSTART;
mbed_official 573:ad23fe03a082 222 }
mbed_official 573:ad23fe03a082 223 }
mbed_official 573:ad23fe03a082 224 else
mbed_official 573:ad23fe03a082 225 {
mbed_official 573:ad23fe03a082 226 tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN);
mbed_official 573:ad23fe03a082 227 tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO);
mbed_official 573:ad23fe03a082 228 if((hadc->Instance == ADC1) && tmp1 && tmp2)
mbed_official 573:ad23fe03a082 229 {
mbed_official 573:ad23fe03a082 230 /* Enable the selected ADC software conversion for injected group */
mbed_official 573:ad23fe03a082 231 hadc->Instance->CR2 |= ADC_CR2_JSWSTART;
mbed_official 573:ad23fe03a082 232 }
mbed_official 573:ad23fe03a082 233 }
mbed_official 573:ad23fe03a082 234
mbed_official 573:ad23fe03a082 235 /* Process unlocked */
mbed_official 573:ad23fe03a082 236 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 237
mbed_official 573:ad23fe03a082 238 /* Return function status */
mbed_official 573:ad23fe03a082 239 return HAL_OK;
mbed_official 573:ad23fe03a082 240 }
mbed_official 573:ad23fe03a082 241
mbed_official 573:ad23fe03a082 242 /**
mbed_official 573:ad23fe03a082 243 * @brief Enables the interrupt and starts ADC conversion of injected channels.
mbed_official 573:ad23fe03a082 244 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 245 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 246 *
mbed_official 573:ad23fe03a082 247 * @retval HAL status.
mbed_official 573:ad23fe03a082 248 */
mbed_official 573:ad23fe03a082 249 HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 250 {
mbed_official 573:ad23fe03a082 251 __IO uint32_t counter = 0;
mbed_official 573:ad23fe03a082 252 uint32_t tmp1 = 0, tmp2 =0;
mbed_official 573:ad23fe03a082 253
mbed_official 573:ad23fe03a082 254 /* Process locked */
mbed_official 573:ad23fe03a082 255 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 256
mbed_official 573:ad23fe03a082 257 /* Check if a regular conversion is ongoing */
mbed_official 573:ad23fe03a082 258 if(hadc->State == HAL_ADC_STATE_BUSY_REG)
mbed_official 573:ad23fe03a082 259 {
mbed_official 573:ad23fe03a082 260 /* Change ADC state */
mbed_official 573:ad23fe03a082 261 hadc->State = HAL_ADC_STATE_BUSY_INJ_REG;
mbed_official 573:ad23fe03a082 262 }
mbed_official 573:ad23fe03a082 263 else
mbed_official 573:ad23fe03a082 264 {
mbed_official 573:ad23fe03a082 265 /* Change ADC state */
mbed_official 573:ad23fe03a082 266 hadc->State = HAL_ADC_STATE_BUSY_INJ;
mbed_official 573:ad23fe03a082 267 }
mbed_official 573:ad23fe03a082 268
mbed_official 573:ad23fe03a082 269 /* Set ADC error code to none */
mbed_official 573:ad23fe03a082 270 hadc->ErrorCode = HAL_ADC_ERROR_NONE;
mbed_official 573:ad23fe03a082 271
mbed_official 573:ad23fe03a082 272 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 573:ad23fe03a082 273 Tstab time the ADC's stabilization */
mbed_official 573:ad23fe03a082 274 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 573:ad23fe03a082 275 {
mbed_official 573:ad23fe03a082 276 /* Enable the Peripheral */
mbed_official 573:ad23fe03a082 277 __HAL_ADC_ENABLE(hadc);
mbed_official 573:ad23fe03a082 278
mbed_official 573:ad23fe03a082 279 /* Delay for temperature sensor stabilization time */
mbed_official 573:ad23fe03a082 280 /* Compute number of CPU cycles to wait for */
mbed_official 573:ad23fe03a082 281 counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000));
mbed_official 573:ad23fe03a082 282 while(counter != 0)
mbed_official 573:ad23fe03a082 283 {
mbed_official 573:ad23fe03a082 284 counter--;
mbed_official 573:ad23fe03a082 285 }
mbed_official 573:ad23fe03a082 286 }
mbed_official 573:ad23fe03a082 287
mbed_official 573:ad23fe03a082 288 /* Enable the ADC end of conversion interrupt for injected group */
mbed_official 573:ad23fe03a082 289 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);
mbed_official 573:ad23fe03a082 290
mbed_official 573:ad23fe03a082 291 /* Enable the ADC overrun interrupt */
mbed_official 573:ad23fe03a082 292 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
mbed_official 573:ad23fe03a082 293
mbed_official 573:ad23fe03a082 294 /* Check if Multimode enabled */
mbed_official 573:ad23fe03a082 295 if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI))
mbed_official 573:ad23fe03a082 296 {
mbed_official 573:ad23fe03a082 297 tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN);
mbed_official 573:ad23fe03a082 298 tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO);
mbed_official 573:ad23fe03a082 299 if(tmp1 && tmp2)
mbed_official 573:ad23fe03a082 300 {
mbed_official 573:ad23fe03a082 301 /* Enable the selected ADC software conversion for injected group */
mbed_official 573:ad23fe03a082 302 hadc->Instance->CR2 |= ADC_CR2_JSWSTART;
mbed_official 573:ad23fe03a082 303 }
mbed_official 573:ad23fe03a082 304 }
mbed_official 573:ad23fe03a082 305 else
mbed_official 573:ad23fe03a082 306 {
mbed_official 573:ad23fe03a082 307 tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN);
mbed_official 573:ad23fe03a082 308 tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO);
mbed_official 573:ad23fe03a082 309 if((hadc->Instance == ADC1) && tmp1 && tmp2)
mbed_official 573:ad23fe03a082 310 {
mbed_official 573:ad23fe03a082 311 /* Enable the selected ADC software conversion for injected group */
mbed_official 573:ad23fe03a082 312 hadc->Instance->CR2 |= ADC_CR2_JSWSTART;
mbed_official 573:ad23fe03a082 313 }
mbed_official 573:ad23fe03a082 314 }
mbed_official 573:ad23fe03a082 315
mbed_official 573:ad23fe03a082 316 /* Process unlocked */
mbed_official 573:ad23fe03a082 317 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 318
mbed_official 573:ad23fe03a082 319 /* Return function status */
mbed_official 573:ad23fe03a082 320 return HAL_OK;
mbed_official 573:ad23fe03a082 321 }
mbed_official 573:ad23fe03a082 322
mbed_official 573:ad23fe03a082 323 /**
mbed_official 573:ad23fe03a082 324 * @brief Disables ADC and stop conversion of injected channels.
mbed_official 573:ad23fe03a082 325 *
mbed_official 573:ad23fe03a082 326 * @note Caution: This function will stop also regular channels.
mbed_official 573:ad23fe03a082 327 *
mbed_official 573:ad23fe03a082 328 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 329 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 330 * @retval HAL status.
mbed_official 573:ad23fe03a082 331 */
mbed_official 573:ad23fe03a082 332 HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 333 {
mbed_official 573:ad23fe03a082 334 /* Disable the Peripheral */
mbed_official 573:ad23fe03a082 335 __HAL_ADC_DISABLE(hadc);
mbed_official 573:ad23fe03a082 336
mbed_official 573:ad23fe03a082 337 /* Change ADC state */
mbed_official 573:ad23fe03a082 338 hadc->State = HAL_ADC_STATE_READY;
mbed_official 573:ad23fe03a082 339
mbed_official 573:ad23fe03a082 340 /* Return function status */
mbed_official 573:ad23fe03a082 341 return HAL_OK;
mbed_official 573:ad23fe03a082 342 }
mbed_official 573:ad23fe03a082 343
mbed_official 573:ad23fe03a082 344 /**
mbed_official 573:ad23fe03a082 345 * @brief Poll for injected conversion complete
mbed_official 573:ad23fe03a082 346 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 347 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 348 * @param Timeout: Timeout value in millisecond.
mbed_official 573:ad23fe03a082 349 * @retval HAL status
mbed_official 573:ad23fe03a082 350 */
mbed_official 573:ad23fe03a082 351 HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
mbed_official 573:ad23fe03a082 352 {
mbed_official 573:ad23fe03a082 353 uint32_t tickstart = 0;
mbed_official 573:ad23fe03a082 354
mbed_official 573:ad23fe03a082 355 /* Get tick */
mbed_official 573:ad23fe03a082 356 tickstart = HAL_GetTick();
mbed_official 573:ad23fe03a082 357
mbed_official 573:ad23fe03a082 358 /* Check End of conversion flag */
mbed_official 573:ad23fe03a082 359 while(!(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOC)))
mbed_official 573:ad23fe03a082 360 {
mbed_official 573:ad23fe03a082 361 /* Check for the Timeout */
mbed_official 573:ad23fe03a082 362 if(Timeout != HAL_MAX_DELAY)
mbed_official 573:ad23fe03a082 363 {
mbed_official 573:ad23fe03a082 364 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 573:ad23fe03a082 365 {
mbed_official 573:ad23fe03a082 366 hadc->State= HAL_ADC_STATE_TIMEOUT;
mbed_official 573:ad23fe03a082 367 /* Process unlocked */
mbed_official 573:ad23fe03a082 368 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 369 return HAL_TIMEOUT;
mbed_official 573:ad23fe03a082 370 }
mbed_official 573:ad23fe03a082 371 }
mbed_official 573:ad23fe03a082 372 }
mbed_official 573:ad23fe03a082 373
mbed_official 573:ad23fe03a082 374 /* Check if a regular conversion is ready */
mbed_official 573:ad23fe03a082 375 if(hadc->State == HAL_ADC_STATE_EOC_REG)
mbed_official 573:ad23fe03a082 376 {
mbed_official 573:ad23fe03a082 377 /* Change ADC state */
mbed_official 573:ad23fe03a082 378 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 573:ad23fe03a082 379 }
mbed_official 573:ad23fe03a082 380 else
mbed_official 573:ad23fe03a082 381 {
mbed_official 573:ad23fe03a082 382 /* Change ADC state */
mbed_official 573:ad23fe03a082 383 hadc->State = HAL_ADC_STATE_EOC_INJ;
mbed_official 573:ad23fe03a082 384 }
mbed_official 573:ad23fe03a082 385
mbed_official 573:ad23fe03a082 386 /* Return ADC state */
mbed_official 573:ad23fe03a082 387 return HAL_OK;
mbed_official 573:ad23fe03a082 388 }
mbed_official 573:ad23fe03a082 389
mbed_official 573:ad23fe03a082 390 /**
mbed_official 573:ad23fe03a082 391 * @brief Disables the interrupt and stop ADC conversion of injected channels.
mbed_official 573:ad23fe03a082 392 *
mbed_official 573:ad23fe03a082 393 * @note Caution: This function will stop also regular channels.
mbed_official 573:ad23fe03a082 394 *
mbed_official 573:ad23fe03a082 395 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 396 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 397 * @retval HAL status.
mbed_official 573:ad23fe03a082 398 */
mbed_official 573:ad23fe03a082 399 HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 400 {
mbed_official 573:ad23fe03a082 401 /* Disable the ADC end of conversion interrupt for regular group */
mbed_official 573:ad23fe03a082 402 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);
mbed_official 573:ad23fe03a082 403
mbed_official 573:ad23fe03a082 404 /* Disable the ADC end of conversion interrupt for injected group */
mbed_official 573:ad23fe03a082 405 __HAL_ADC_DISABLE_IT(hadc, ADC_CR1_JEOCIE);
mbed_official 573:ad23fe03a082 406
mbed_official 573:ad23fe03a082 407 /* Enable the Peripheral */
mbed_official 573:ad23fe03a082 408 __HAL_ADC_DISABLE(hadc);
mbed_official 573:ad23fe03a082 409
mbed_official 573:ad23fe03a082 410 /* Change ADC state */
mbed_official 573:ad23fe03a082 411 hadc->State = HAL_ADC_STATE_READY;
mbed_official 573:ad23fe03a082 412
mbed_official 573:ad23fe03a082 413 /* Return function status */
mbed_official 573:ad23fe03a082 414 return HAL_OK;
mbed_official 573:ad23fe03a082 415 }
mbed_official 573:ad23fe03a082 416
mbed_official 573:ad23fe03a082 417 /**
mbed_official 573:ad23fe03a082 418 * @brief Gets the converted value from data register of injected channel.
mbed_official 573:ad23fe03a082 419 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 420 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 421 * @param InjectedRank: the ADC injected rank.
mbed_official 573:ad23fe03a082 422 * This parameter can be one of the following values:
mbed_official 573:ad23fe03a082 423 * @arg ADC_INJECTED_RANK_1: Injected Channel1 selected
mbed_official 573:ad23fe03a082 424 * @arg ADC_INJECTED_RANK_2: Injected Channel2 selected
mbed_official 573:ad23fe03a082 425 * @arg ADC_INJECTED_RANK_3: Injected Channel3 selected
mbed_official 573:ad23fe03a082 426 * @arg ADC_INJECTED_RANK_4: Injected Channel4 selected
mbed_official 573:ad23fe03a082 427 * @retval None
mbed_official 573:ad23fe03a082 428 */
mbed_official 573:ad23fe03a082 429 uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank)
mbed_official 573:ad23fe03a082 430 {
mbed_official 573:ad23fe03a082 431 __IO uint32_t tmp = 0;
mbed_official 573:ad23fe03a082 432
mbed_official 573:ad23fe03a082 433 /* Check the parameters */
mbed_official 573:ad23fe03a082 434 assert_param(IS_ADC_INJECTED_RANK(InjectedRank));
mbed_official 573:ad23fe03a082 435
mbed_official 573:ad23fe03a082 436 /* Clear the ADCx's flag for injected end of conversion */
mbed_official 573:ad23fe03a082 437 __HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_JEOC);
mbed_official 573:ad23fe03a082 438
mbed_official 573:ad23fe03a082 439 /* Return the selected ADC converted value */
mbed_official 573:ad23fe03a082 440 switch(InjectedRank)
mbed_official 573:ad23fe03a082 441 {
mbed_official 573:ad23fe03a082 442 case ADC_INJECTED_RANK_4:
mbed_official 573:ad23fe03a082 443 {
mbed_official 573:ad23fe03a082 444 tmp = hadc->Instance->JDR4;
mbed_official 573:ad23fe03a082 445 }
mbed_official 573:ad23fe03a082 446 break;
mbed_official 573:ad23fe03a082 447 case ADC_INJECTED_RANK_3:
mbed_official 573:ad23fe03a082 448 {
mbed_official 573:ad23fe03a082 449 tmp = hadc->Instance->JDR3;
mbed_official 573:ad23fe03a082 450 }
mbed_official 573:ad23fe03a082 451 break;
mbed_official 573:ad23fe03a082 452 case ADC_INJECTED_RANK_2:
mbed_official 573:ad23fe03a082 453 {
mbed_official 573:ad23fe03a082 454 tmp = hadc->Instance->JDR2;
mbed_official 573:ad23fe03a082 455 }
mbed_official 573:ad23fe03a082 456 break;
mbed_official 573:ad23fe03a082 457 case ADC_INJECTED_RANK_1:
mbed_official 573:ad23fe03a082 458 {
mbed_official 573:ad23fe03a082 459 tmp = hadc->Instance->JDR1;
mbed_official 573:ad23fe03a082 460 }
mbed_official 573:ad23fe03a082 461 break;
mbed_official 573:ad23fe03a082 462 default:
mbed_official 573:ad23fe03a082 463 break;
mbed_official 573:ad23fe03a082 464 }
mbed_official 573:ad23fe03a082 465 return tmp;
mbed_official 573:ad23fe03a082 466 }
mbed_official 573:ad23fe03a082 467
mbed_official 573:ad23fe03a082 468 /**
mbed_official 573:ad23fe03a082 469 * @brief Enables ADC DMA request after last transfer (Multi-ADC mode) and enables ADC peripheral
mbed_official 573:ad23fe03a082 470 *
mbed_official 573:ad23fe03a082 471 * @note Caution: This function must be used only with the ADC master.
mbed_official 573:ad23fe03a082 472 *
mbed_official 573:ad23fe03a082 473 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 474 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 475 * @param pData: Pointer to buffer in which transferred from ADC peripheral to memory will be stored.
mbed_official 573:ad23fe03a082 476 * @param Length: The length of data to be transferred from ADC peripheral to memory.
mbed_official 573:ad23fe03a082 477 * @retval HAL status
mbed_official 573:ad23fe03a082 478 */
mbed_official 573:ad23fe03a082 479 HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
mbed_official 573:ad23fe03a082 480 {
mbed_official 573:ad23fe03a082 481 __IO uint32_t counter = 0;
mbed_official 573:ad23fe03a082 482
mbed_official 573:ad23fe03a082 483 /* Check the parameters */
mbed_official 573:ad23fe03a082 484 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
mbed_official 573:ad23fe03a082 485 assert_param(IS_ADC_EXT_TRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
mbed_official 573:ad23fe03a082 486 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests));
mbed_official 573:ad23fe03a082 487
mbed_official 573:ad23fe03a082 488 /* Process locked */
mbed_official 573:ad23fe03a082 489 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 490
mbed_official 573:ad23fe03a082 491 /* Enable ADC overrun interrupt */
mbed_official 573:ad23fe03a082 492 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
mbed_official 573:ad23fe03a082 493
mbed_official 573:ad23fe03a082 494 if (hadc->Init.DMAContinuousRequests != DISABLE)
mbed_official 573:ad23fe03a082 495 {
mbed_official 573:ad23fe03a082 496 /* Enable the selected ADC DMA request after last transfer */
mbed_official 573:ad23fe03a082 497 ADC->CCR |= ADC_CCR_DDS;
mbed_official 573:ad23fe03a082 498 }
mbed_official 573:ad23fe03a082 499 else
mbed_official 573:ad23fe03a082 500 {
mbed_official 573:ad23fe03a082 501 /* Disable the selected ADC EOC rising on each regular channel conversion */
mbed_official 573:ad23fe03a082 502 ADC->CCR &= ~ADC_CCR_DDS;
mbed_official 573:ad23fe03a082 503 }
mbed_official 573:ad23fe03a082 504
mbed_official 573:ad23fe03a082 505 /* Set the DMA transfer complete callback */
mbed_official 573:ad23fe03a082 506 hadc->DMA_Handle->XferCpltCallback = ADC_MultiModeDMAConvCplt;
mbed_official 573:ad23fe03a082 507
mbed_official 573:ad23fe03a082 508 /* Set the DMA half transfer complete callback */
mbed_official 573:ad23fe03a082 509 hadc->DMA_Handle->XferHalfCpltCallback = ADC_MultiModeDMAHalfConvCplt;
mbed_official 573:ad23fe03a082 510
mbed_official 573:ad23fe03a082 511 /* Set the DMA error callback */
mbed_official 573:ad23fe03a082 512 hadc->DMA_Handle->XferErrorCallback = ADC_MultiModeDMAError ;
mbed_official 573:ad23fe03a082 513
mbed_official 573:ad23fe03a082 514 /* Enable the DMA Stream */
mbed_official 573:ad23fe03a082 515 HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&ADC->CDR, (uint32_t)pData, Length);
mbed_official 573:ad23fe03a082 516
mbed_official 573:ad23fe03a082 517 /* Change ADC state */
mbed_official 573:ad23fe03a082 518 hadc->State = HAL_ADC_STATE_BUSY_REG;
mbed_official 573:ad23fe03a082 519
mbed_official 573:ad23fe03a082 520 /* Check if ADC peripheral is disabled in order to enable it and wait during
mbed_official 573:ad23fe03a082 521 Tstab time the ADC's stabilization */
mbed_official 573:ad23fe03a082 522 if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON)
mbed_official 573:ad23fe03a082 523 {
mbed_official 573:ad23fe03a082 524 /* Enable the Peripheral */
mbed_official 573:ad23fe03a082 525 __HAL_ADC_ENABLE(hadc);
mbed_official 573:ad23fe03a082 526
mbed_official 573:ad23fe03a082 527 /* Delay for temperature sensor stabilization time */
mbed_official 573:ad23fe03a082 528 /* Compute number of CPU cycles to wait for */
mbed_official 573:ad23fe03a082 529 counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000));
mbed_official 573:ad23fe03a082 530 while(counter != 0)
mbed_official 573:ad23fe03a082 531 {
mbed_official 573:ad23fe03a082 532 counter--;
mbed_official 573:ad23fe03a082 533 }
mbed_official 573:ad23fe03a082 534 }
mbed_official 573:ad23fe03a082 535
mbed_official 573:ad23fe03a082 536 /* if no external trigger present enable software conversion of regular channels */
mbed_official 573:ad23fe03a082 537 if((hadc->Instance->CR2 & ADC_CR2_EXTEN) == RESET)
mbed_official 573:ad23fe03a082 538 {
mbed_official 573:ad23fe03a082 539 /* Enable the selected ADC software conversion for regular group */
mbed_official 573:ad23fe03a082 540 hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART;
mbed_official 573:ad23fe03a082 541 }
mbed_official 573:ad23fe03a082 542
mbed_official 573:ad23fe03a082 543 /* Process unlocked */
mbed_official 573:ad23fe03a082 544 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 545
mbed_official 573:ad23fe03a082 546 /* Return function status */
mbed_official 573:ad23fe03a082 547 return HAL_OK;
mbed_official 573:ad23fe03a082 548 }
mbed_official 573:ad23fe03a082 549
mbed_official 573:ad23fe03a082 550 /**
mbed_official 573:ad23fe03a082 551 * @brief Disables ADC DMA (multi-ADC mode) and disables ADC peripheral
mbed_official 573:ad23fe03a082 552 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 553 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 554 * @retval HAL status
mbed_official 573:ad23fe03a082 555 */
mbed_official 573:ad23fe03a082 556 HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 557 {
mbed_official 573:ad23fe03a082 558 /* Process locked */
mbed_official 573:ad23fe03a082 559 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 560
mbed_official 573:ad23fe03a082 561 /* Enable the Peripheral */
mbed_official 573:ad23fe03a082 562 __HAL_ADC_DISABLE(hadc);
mbed_official 573:ad23fe03a082 563
mbed_official 573:ad23fe03a082 564 /* Disable ADC overrun interrupt */
mbed_official 573:ad23fe03a082 565 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
mbed_official 573:ad23fe03a082 566
mbed_official 573:ad23fe03a082 567 /* Disable the selected ADC DMA request after last transfer */
mbed_official 573:ad23fe03a082 568 ADC->CCR &= ~ADC_CCR_DDS;
mbed_official 573:ad23fe03a082 569
mbed_official 573:ad23fe03a082 570 /* Disable the ADC DMA Stream */
mbed_official 573:ad23fe03a082 571 HAL_DMA_Abort(hadc->DMA_Handle);
mbed_official 573:ad23fe03a082 572
mbed_official 573:ad23fe03a082 573 /* Change ADC state */
mbed_official 573:ad23fe03a082 574 hadc->State = HAL_ADC_STATE_READY;
mbed_official 573:ad23fe03a082 575
mbed_official 573:ad23fe03a082 576 /* Process unlocked */
mbed_official 573:ad23fe03a082 577 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 578
mbed_official 573:ad23fe03a082 579 /* Return function status */
mbed_official 573:ad23fe03a082 580 return HAL_OK;
mbed_official 573:ad23fe03a082 581 }
mbed_official 573:ad23fe03a082 582
mbed_official 573:ad23fe03a082 583 /**
mbed_official 573:ad23fe03a082 584 * @brief Returns the last ADC1, ADC2 and ADC3 regular conversions results
mbed_official 573:ad23fe03a082 585 * data in the selected multi mode.
mbed_official 573:ad23fe03a082 586 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 587 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 588 * @retval The converted data value.
mbed_official 573:ad23fe03a082 589 */
mbed_official 573:ad23fe03a082 590 uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 591 {
mbed_official 573:ad23fe03a082 592 /* Return the multi mode conversion value */
mbed_official 573:ad23fe03a082 593 return ADC->CDR;
mbed_official 573:ad23fe03a082 594 }
mbed_official 573:ad23fe03a082 595
mbed_official 573:ad23fe03a082 596 /**
mbed_official 573:ad23fe03a082 597 * @brief Injected conversion complete callback in non blocking mode
mbed_official 573:ad23fe03a082 598 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 599 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 600 * @retval None
mbed_official 573:ad23fe03a082 601 */
mbed_official 573:ad23fe03a082 602 __weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc)
mbed_official 573:ad23fe03a082 603 {
mbed_official 573:ad23fe03a082 604 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 573:ad23fe03a082 605 the HAL_ADC_InjectedConvCpltCallback could be implemented in the user file
mbed_official 573:ad23fe03a082 606 */
mbed_official 573:ad23fe03a082 607 }
mbed_official 573:ad23fe03a082 608
mbed_official 573:ad23fe03a082 609 /**
mbed_official 573:ad23fe03a082 610 * @brief Configures for the selected ADC injected channel its corresponding
mbed_official 573:ad23fe03a082 611 * rank in the sequencer and its sample time.
mbed_official 573:ad23fe03a082 612 * @param hadc: pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 613 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 614 * @param sConfigInjected: ADC configuration structure for injected channel.
mbed_official 573:ad23fe03a082 615 * @retval None
mbed_official 573:ad23fe03a082 616 */
mbed_official 573:ad23fe03a082 617 HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_InjectionConfTypeDef* sConfigInjected)
mbed_official 573:ad23fe03a082 618 {
mbed_official 573:ad23fe03a082 619
mbed_official 573:ad23fe03a082 620 #ifdef USE_FULL_ASSERT
mbed_official 573:ad23fe03a082 621 uint32_t tmp = 0;
mbed_official 573:ad23fe03a082 622 #endif /* USE_FULL_ASSERT */
mbed_official 573:ad23fe03a082 623
mbed_official 573:ad23fe03a082 624 /* Check the parameters */
mbed_official 573:ad23fe03a082 625 assert_param(IS_ADC_CHANNEL(sConfigInjected->InjectedChannel));
mbed_official 573:ad23fe03a082 626 assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank));
mbed_official 573:ad23fe03a082 627 assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime));
mbed_official 573:ad23fe03a082 628 assert_param(IS_ADC_EXT_INJEC_TRIG(sConfigInjected->ExternalTrigInjecConv));
mbed_official 573:ad23fe03a082 629 assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(sConfigInjected->ExternalTrigInjecConvEdge));
mbed_official 573:ad23fe03a082 630 assert_param(IS_ADC_INJECTED_LENGTH(sConfigInjected->InjectedNbrOfConversion));
mbed_official 573:ad23fe03a082 631 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv));
mbed_official 573:ad23fe03a082 632 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode));
mbed_official 573:ad23fe03a082 633
mbed_official 573:ad23fe03a082 634 #ifdef USE_FULL_ASSERT
mbed_official 573:ad23fe03a082 635 tmp = ADC_GET_RESOLUTION(hadc);
mbed_official 573:ad23fe03a082 636 assert_param(IS_ADC_RANGE(tmp, sConfigInjected->InjectedOffset));
mbed_official 573:ad23fe03a082 637 #endif /* USE_FULL_ASSERT */
mbed_official 573:ad23fe03a082 638
mbed_official 573:ad23fe03a082 639 /* Process locked */
mbed_official 573:ad23fe03a082 640 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 641
mbed_official 573:ad23fe03a082 642 /* if ADC_Channel_10 ... ADC_Channel_18 is selected */
mbed_official 573:ad23fe03a082 643 if (sConfigInjected->InjectedChannel > ADC_CHANNEL_9)
mbed_official 573:ad23fe03a082 644 {
mbed_official 573:ad23fe03a082 645 /* Clear the old sample time */
mbed_official 573:ad23fe03a082 646 hadc->Instance->SMPR1 &= ~ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel);
mbed_official 573:ad23fe03a082 647
mbed_official 573:ad23fe03a082 648 /* Set the new sample time */
mbed_official 573:ad23fe03a082 649 hadc->Instance->SMPR1 |= ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel);
mbed_official 573:ad23fe03a082 650 }
mbed_official 573:ad23fe03a082 651 else /* ADC_Channel include in ADC_Channel_[0..9] */
mbed_official 573:ad23fe03a082 652 {
mbed_official 573:ad23fe03a082 653 /* Clear the old sample time */
mbed_official 573:ad23fe03a082 654 hadc->Instance->SMPR2 &= ~ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel);
mbed_official 573:ad23fe03a082 655
mbed_official 573:ad23fe03a082 656 /* Set the new sample time */
mbed_official 573:ad23fe03a082 657 hadc->Instance->SMPR2 |= ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel);
mbed_official 573:ad23fe03a082 658 }
mbed_official 573:ad23fe03a082 659
mbed_official 573:ad23fe03a082 660 /*---------------------------- ADCx JSQR Configuration -----------------*/
mbed_official 573:ad23fe03a082 661 hadc->Instance->JSQR &= ~(ADC_JSQR_JL);
mbed_official 573:ad23fe03a082 662 hadc->Instance->JSQR |= ADC_SQR1(sConfigInjected->InjectedNbrOfConversion);
mbed_official 573:ad23fe03a082 663
mbed_official 573:ad23fe03a082 664 /* Rank configuration */
mbed_official 573:ad23fe03a082 665
mbed_official 573:ad23fe03a082 666 /* Clear the old SQx bits for the selected rank */
mbed_official 573:ad23fe03a082 667 hadc->Instance->JSQR &= ~ADC_JSQR(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion);
mbed_official 573:ad23fe03a082 668
mbed_official 573:ad23fe03a082 669 /* Set the SQx bits for the selected rank */
mbed_official 573:ad23fe03a082 670 hadc->Instance->JSQR |= ADC_JSQR(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion);
mbed_official 573:ad23fe03a082 671
mbed_official 573:ad23fe03a082 672 /* Select external trigger to start conversion */
mbed_official 573:ad23fe03a082 673 hadc->Instance->CR2 &= ~(ADC_CR2_JEXTSEL);
mbed_official 573:ad23fe03a082 674 hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConv;
mbed_official 573:ad23fe03a082 675
mbed_official 573:ad23fe03a082 676 /* Select external trigger polarity */
mbed_official 573:ad23fe03a082 677 hadc->Instance->CR2 &= ~(ADC_CR2_JEXTEN);
mbed_official 573:ad23fe03a082 678 hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConvEdge;
mbed_official 573:ad23fe03a082 679
mbed_official 573:ad23fe03a082 680 if (sConfigInjected->AutoInjectedConv != DISABLE)
mbed_official 573:ad23fe03a082 681 {
mbed_official 573:ad23fe03a082 682 /* Enable the selected ADC automatic injected group conversion */
mbed_official 573:ad23fe03a082 683 hadc->Instance->CR1 |= ADC_CR1_JAUTO;
mbed_official 573:ad23fe03a082 684 }
mbed_official 573:ad23fe03a082 685 else
mbed_official 573:ad23fe03a082 686 {
mbed_official 573:ad23fe03a082 687 /* Disable the selected ADC automatic injected group conversion */
mbed_official 573:ad23fe03a082 688 hadc->Instance->CR1 &= ~(ADC_CR1_JAUTO);
mbed_official 573:ad23fe03a082 689 }
mbed_official 573:ad23fe03a082 690
mbed_official 573:ad23fe03a082 691 if (sConfigInjected->InjectedDiscontinuousConvMode != DISABLE)
mbed_official 573:ad23fe03a082 692 {
mbed_official 573:ad23fe03a082 693 /* Enable the selected ADC injected discontinuous mode */
mbed_official 573:ad23fe03a082 694 hadc->Instance->CR1 |= ADC_CR1_JDISCEN;
mbed_official 573:ad23fe03a082 695 }
mbed_official 573:ad23fe03a082 696 else
mbed_official 573:ad23fe03a082 697 {
mbed_official 573:ad23fe03a082 698 /* Disable the selected ADC injected discontinuous mode */
mbed_official 573:ad23fe03a082 699 hadc->Instance->CR1 &= ~(ADC_CR1_JDISCEN);
mbed_official 573:ad23fe03a082 700 }
mbed_official 573:ad23fe03a082 701
mbed_official 573:ad23fe03a082 702 switch(sConfigInjected->InjectedRank)
mbed_official 573:ad23fe03a082 703 {
mbed_official 573:ad23fe03a082 704 case 1:
mbed_official 573:ad23fe03a082 705 /* Set injected channel 1 offset */
mbed_official 573:ad23fe03a082 706 hadc->Instance->JOFR1 &= ~(ADC_JOFR1_JOFFSET1);
mbed_official 573:ad23fe03a082 707 hadc->Instance->JOFR1 |= sConfigInjected->InjectedOffset;
mbed_official 573:ad23fe03a082 708 break;
mbed_official 573:ad23fe03a082 709 case 2:
mbed_official 573:ad23fe03a082 710 /* Set injected channel 2 offset */
mbed_official 573:ad23fe03a082 711 hadc->Instance->JOFR2 &= ~(ADC_JOFR2_JOFFSET2);
mbed_official 573:ad23fe03a082 712 hadc->Instance->JOFR2 |= sConfigInjected->InjectedOffset;
mbed_official 573:ad23fe03a082 713 break;
mbed_official 573:ad23fe03a082 714 case 3:
mbed_official 573:ad23fe03a082 715 /* Set injected channel 3 offset */
mbed_official 573:ad23fe03a082 716 hadc->Instance->JOFR3 &= ~(ADC_JOFR3_JOFFSET3);
mbed_official 573:ad23fe03a082 717 hadc->Instance->JOFR3 |= sConfigInjected->InjectedOffset;
mbed_official 573:ad23fe03a082 718 break;
mbed_official 573:ad23fe03a082 719 default:
mbed_official 573:ad23fe03a082 720 /* Set injected channel 4 offset */
mbed_official 573:ad23fe03a082 721 hadc->Instance->JOFR4 &= ~(ADC_JOFR4_JOFFSET4);
mbed_official 573:ad23fe03a082 722 hadc->Instance->JOFR4 |= sConfigInjected->InjectedOffset;
mbed_official 573:ad23fe03a082 723 break;
mbed_official 573:ad23fe03a082 724 }
mbed_official 573:ad23fe03a082 725
mbed_official 573:ad23fe03a082 726 /* if ADC1 Channel_18 is selected enable VBAT Channel */
mbed_official 573:ad23fe03a082 727 if ((hadc->Instance == ADC1) && (sConfigInjected->InjectedChannel == ADC_CHANNEL_VBAT))
mbed_official 573:ad23fe03a082 728 {
mbed_official 573:ad23fe03a082 729 /* Enable the VBAT channel*/
mbed_official 573:ad23fe03a082 730 ADC->CCR |= ADC_CCR_VBATE;
mbed_official 573:ad23fe03a082 731 }
mbed_official 573:ad23fe03a082 732
mbed_official 573:ad23fe03a082 733 /* if ADC1 Channel_16 or Channel_17 is selected enable TSVREFE Channel(Temperature sensor and VREFINT) */
mbed_official 573:ad23fe03a082 734 if ((hadc->Instance == ADC1) && ((sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) || (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT)))
mbed_official 573:ad23fe03a082 735 {
mbed_official 573:ad23fe03a082 736 /* Enable the TSVREFE channel*/
mbed_official 573:ad23fe03a082 737 ADC->CCR |= ADC_CCR_TSVREFE;
mbed_official 573:ad23fe03a082 738 }
mbed_official 573:ad23fe03a082 739
mbed_official 573:ad23fe03a082 740 /* Process unlocked */
mbed_official 573:ad23fe03a082 741 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 742
mbed_official 573:ad23fe03a082 743 /* Return function status */
mbed_official 573:ad23fe03a082 744 return HAL_OK;
mbed_official 573:ad23fe03a082 745 }
mbed_official 573:ad23fe03a082 746
mbed_official 573:ad23fe03a082 747 /**
mbed_official 573:ad23fe03a082 748 * @brief Configures the ADC multi-mode
mbed_official 573:ad23fe03a082 749 * @param hadc : pointer to a ADC_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 750 * the configuration information for the specified ADC.
mbed_official 573:ad23fe03a082 751 * @param multimode : pointer to an ADC_MultiModeTypeDef structure that contains
mbed_official 573:ad23fe03a082 752 * the configuration information for multimode.
mbed_official 573:ad23fe03a082 753 * @retval HAL status
mbed_official 573:ad23fe03a082 754 */
mbed_official 573:ad23fe03a082 755 HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_MultiModeTypeDef* multimode)
mbed_official 573:ad23fe03a082 756 {
mbed_official 573:ad23fe03a082 757 /* Check the parameters */
mbed_official 573:ad23fe03a082 758 assert_param(IS_ADC_MODE(multimode->Mode));
mbed_official 573:ad23fe03a082 759 assert_param(IS_ADC_DMA_ACCESS_MODE(multimode->DMAAccessMode));
mbed_official 573:ad23fe03a082 760 assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
mbed_official 573:ad23fe03a082 761
mbed_official 573:ad23fe03a082 762 /* Process locked */
mbed_official 573:ad23fe03a082 763 __HAL_LOCK(hadc);
mbed_official 573:ad23fe03a082 764
mbed_official 573:ad23fe03a082 765 /* Set ADC mode */
mbed_official 573:ad23fe03a082 766 ADC->CCR &= ~(ADC_CCR_MULTI);
mbed_official 573:ad23fe03a082 767 ADC->CCR |= multimode->Mode;
mbed_official 573:ad23fe03a082 768
mbed_official 573:ad23fe03a082 769 /* Set the ADC DMA access mode */
mbed_official 573:ad23fe03a082 770 ADC->CCR &= ~(ADC_CCR_DMA);
mbed_official 573:ad23fe03a082 771 ADC->CCR |= multimode->DMAAccessMode;
mbed_official 573:ad23fe03a082 772
mbed_official 573:ad23fe03a082 773 /* Set delay between two sampling phases */
mbed_official 573:ad23fe03a082 774 ADC->CCR &= ~(ADC_CCR_DELAY);
mbed_official 573:ad23fe03a082 775 ADC->CCR |= multimode->TwoSamplingDelay;
mbed_official 573:ad23fe03a082 776
mbed_official 573:ad23fe03a082 777 /* Process unlocked */
mbed_official 573:ad23fe03a082 778 __HAL_UNLOCK(hadc);
mbed_official 573:ad23fe03a082 779
mbed_official 573:ad23fe03a082 780 /* Return function status */
mbed_official 573:ad23fe03a082 781 return HAL_OK;
mbed_official 573:ad23fe03a082 782 }
mbed_official 573:ad23fe03a082 783
mbed_official 573:ad23fe03a082 784 /**
mbed_official 573:ad23fe03a082 785 * @}
mbed_official 573:ad23fe03a082 786 */
mbed_official 573:ad23fe03a082 787
mbed_official 573:ad23fe03a082 788 /**
mbed_official 573:ad23fe03a082 789 * @brief DMA transfer complete callback.
mbed_official 573:ad23fe03a082 790 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 791 * the configuration information for the specified DMA module.
mbed_official 573:ad23fe03a082 792 * @retval None
mbed_official 573:ad23fe03a082 793 */
mbed_official 573:ad23fe03a082 794 static void ADC_MultiModeDMAConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 573:ad23fe03a082 795 {
mbed_official 573:ad23fe03a082 796 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 573:ad23fe03a082 797
mbed_official 573:ad23fe03a082 798 /* Check if an injected conversion is ready */
mbed_official 573:ad23fe03a082 799 if(hadc->State == HAL_ADC_STATE_EOC_INJ)
mbed_official 573:ad23fe03a082 800 {
mbed_official 573:ad23fe03a082 801 /* Change ADC state */
mbed_official 573:ad23fe03a082 802 hadc->State = HAL_ADC_STATE_EOC_INJ_REG;
mbed_official 573:ad23fe03a082 803 }
mbed_official 573:ad23fe03a082 804 else
mbed_official 573:ad23fe03a082 805 {
mbed_official 573:ad23fe03a082 806 /* Change ADC state */
mbed_official 573:ad23fe03a082 807 hadc->State = HAL_ADC_STATE_EOC_REG;
mbed_official 573:ad23fe03a082 808 }
mbed_official 573:ad23fe03a082 809
mbed_official 573:ad23fe03a082 810 HAL_ADC_ConvCpltCallback(hadc);
mbed_official 573:ad23fe03a082 811 }
mbed_official 573:ad23fe03a082 812
mbed_official 573:ad23fe03a082 813 /**
mbed_official 573:ad23fe03a082 814 * @brief DMA half transfer complete callback.
mbed_official 573:ad23fe03a082 815 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 816 * the configuration information for the specified DMA module.
mbed_official 573:ad23fe03a082 817 * @retval None
mbed_official 573:ad23fe03a082 818 */
mbed_official 573:ad23fe03a082 819 static void ADC_MultiModeDMAHalfConvCplt(DMA_HandleTypeDef *hdma)
mbed_official 573:ad23fe03a082 820 {
mbed_official 573:ad23fe03a082 821 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 573:ad23fe03a082 822 /* Conversion complete callback */
mbed_official 573:ad23fe03a082 823 HAL_ADC_ConvHalfCpltCallback(hadc);
mbed_official 573:ad23fe03a082 824 }
mbed_official 573:ad23fe03a082 825
mbed_official 573:ad23fe03a082 826 /**
mbed_official 573:ad23fe03a082 827 * @brief DMA error callback
mbed_official 573:ad23fe03a082 828 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 573:ad23fe03a082 829 * the configuration information for the specified DMA module.
mbed_official 573:ad23fe03a082 830 * @retval None
mbed_official 573:ad23fe03a082 831 */
mbed_official 573:ad23fe03a082 832 static void ADC_MultiModeDMAError(DMA_HandleTypeDef *hdma)
mbed_official 573:ad23fe03a082 833 {
mbed_official 573:ad23fe03a082 834 ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 573:ad23fe03a082 835 hadc->State= HAL_ADC_STATE_ERROR;
mbed_official 573:ad23fe03a082 836 /* Set ADC error code to DMA error */
mbed_official 573:ad23fe03a082 837 hadc->ErrorCode |= HAL_ADC_ERROR_DMA;
mbed_official 573:ad23fe03a082 838 HAL_ADC_ErrorCallback(hadc);
mbed_official 573:ad23fe03a082 839 }
mbed_official 573:ad23fe03a082 840
mbed_official 573:ad23fe03a082 841 /**
mbed_official 573:ad23fe03a082 842 * @}
mbed_official 573:ad23fe03a082 843 */
mbed_official 573:ad23fe03a082 844
mbed_official 573:ad23fe03a082 845 #endif /* HAL_ADC_MODULE_ENABLED */
mbed_official 573:ad23fe03a082 846 /**
mbed_official 573:ad23fe03a082 847 * @}
mbed_official 573:ad23fe03a082 848 */
mbed_official 573:ad23fe03a082 849
mbed_official 573:ad23fe03a082 850 /**
mbed_official 573:ad23fe03a082 851 * @}
mbed_official 573:ad23fe03a082 852 */
mbed_official 573:ad23fe03a082 853
mbed_official 573:ad23fe03a082 854 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/