Modified version of the mbed library for use with the Nucleo boards.

Dependents:   EEPROMWrite Full-Project

Fork of mbed-src by mbed official

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****/