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 Aug 20 10:45:13 2015 +0100
Revision:
613:bc40b8d2aec4
Parent:
532:fe11edbda85c
Synchronized with git revision 92ca8c7b60a283b6bb60eb65b183dac1599f0ade

Full URL: https://github.com/mbedmicro/mbed/commit/92ca8c7b60a283b6bb60eb65b183dac1599f0ade/

Nordic: update application start address in GCC linker script

Who changed what in which revision?

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