mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_dac.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 235:685d5f11838f 5 * @version V1.1.0
mbed_official 235:685d5f11838f 6 * @date 19-June-2014
mbed_official 235:685d5f11838f 7 * @brief DAC HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides firmware functions to manage the following
mbed_official 235:685d5f11838f 9 * functionalities of the Digital to Analog Converter (DAC) peripheral:
mbed_official 235:685d5f11838f 10 * + Initialization and de-initialization functions
mbed_official 235:685d5f11838f 11 * + IO operation functions
mbed_official 235:685d5f11838f 12 * + Peripheral Control functions
mbed_official 235:685d5f11838f 13 * + Peripheral State and Errors functions
mbed_official 235:685d5f11838f 14 *
mbed_official 235:685d5f11838f 15 *
mbed_official 235:685d5f11838f 16 @verbatim
mbed_official 235:685d5f11838f 17 ==============================================================================
mbed_official 235:685d5f11838f 18 ##### DAC Peripheral features #####
mbed_official 235:685d5f11838f 19 ==============================================================================
mbed_official 235:685d5f11838f 20 [..]
mbed_official 235:685d5f11838f 21 *** DAC Channels ***
mbed_official 235:685d5f11838f 22 ====================
mbed_official 235:685d5f11838f 23 [..]
mbed_official 235:685d5f11838f 24 The device integrates two 12-bit Digital Analog Converters that can
mbed_official 235:685d5f11838f 25 be used independently or simultaneously (dual mode):
mbed_official 235:685d5f11838f 26 (#) DAC channel1 with DAC_OUT1 (PA4) as output
mbed_official 235:685d5f11838f 27 (#) DAC channel2 with DAC_OUT2 (PA5) as output
mbed_official 235:685d5f11838f 28
mbed_official 235:685d5f11838f 29 *** DAC Triggers ***
mbed_official 235:685d5f11838f 30 ====================
mbed_official 235:685d5f11838f 31 [..]
mbed_official 235:685d5f11838f 32 Digital to Analog conversion can be non-triggered using DAC_Trigger_None
mbed_official 235:685d5f11838f 33 and DAC_OUT1/DAC_OUT2 is available once writing to DHRx register.
mbed_official 235:685d5f11838f 34 [..]
mbed_official 235:685d5f11838f 35 Digital to Analog conversion can be triggered by:
mbed_official 235:685d5f11838f 36 (#) External event: EXTI Line 9 (any GPIOx_Pin9) using DAC_Trigger_Ext_IT9.
mbed_official 235:685d5f11838f 37 The used pin (GPIOx_Pin9) must be configured in input mode.
mbed_official 235:685d5f11838f 38
mbed_official 235:685d5f11838f 39 (#) Timers TRGO: TIM2, TIM4, TIM5, TIM6, TIM7 and TIM8
mbed_official 235:685d5f11838f 40 (DAC_Trigger_T2_TRGO, DAC_Trigger_T4_TRGO...)
mbed_official 235:685d5f11838f 41
mbed_official 235:685d5f11838f 42 (#) Software using DAC_Trigger_Software
mbed_official 235:685d5f11838f 43
mbed_official 235:685d5f11838f 44 *** DAC Buffer mode feature ***
mbed_official 235:685d5f11838f 45 ===============================
mbed_official 235:685d5f11838f 46 [..]
mbed_official 235:685d5f11838f 47 Each DAC channel integrates an output buffer that can be used to
mbed_official 235:685d5f11838f 48 reduce the output impedance, and to drive external loads directly
mbed_official 235:685d5f11838f 49 without having to add an external operational amplifier.
mbed_official 235:685d5f11838f 50 To enable, the output buffer use
mbed_official 235:685d5f11838f 51 sConfig.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
mbed_official 235:685d5f11838f 52 [..]
mbed_official 235:685d5f11838f 53 (@) Refer to the device datasheet for more details about output
mbed_official 235:685d5f11838f 54 impedance value with and without output buffer.
mbed_official 235:685d5f11838f 55
mbed_official 235:685d5f11838f 56 *** DAC wave generation feature ***
mbed_official 235:685d5f11838f 57 ===================================
mbed_official 235:685d5f11838f 58 [..]
mbed_official 235:685d5f11838f 59 Both DAC channels can be used to generate
mbed_official 235:685d5f11838f 60 (#) Noise wave
mbed_official 235:685d5f11838f 61 (#) Triangle wave
mbed_official 235:685d5f11838f 62
mbed_official 235:685d5f11838f 63 *** DAC data format ***
mbed_official 235:685d5f11838f 64 =======================
mbed_official 235:685d5f11838f 65 [..]
mbed_official 235:685d5f11838f 66 The DAC data format can be:
mbed_official 235:685d5f11838f 67 (#) 8-bit right alignment using DAC_ALIGN_8B_R
mbed_official 235:685d5f11838f 68 (#) 12-bit left alignment using DAC_ALIGN_12B_L
mbed_official 235:685d5f11838f 69 (#) 12-bit right alignment using DAC_ALIGN_12B_R
mbed_official 235:685d5f11838f 70
mbed_official 235:685d5f11838f 71 *** DAC data value to voltage correspondence ***
mbed_official 235:685d5f11838f 72 ================================================
mbed_official 235:685d5f11838f 73 [..]
mbed_official 235:685d5f11838f 74 The analog output voltage on each DAC channel pin is determined
mbed_official 235:685d5f11838f 75 by the following equation:
mbed_official 235:685d5f11838f 76 DAC_OUTx = VREF+ * DOR / 4095
mbed_official 235:685d5f11838f 77 with DOR is the Data Output Register
mbed_official 235:685d5f11838f 78 VEF+ is the input voltage reference (refer to the device datasheet)
mbed_official 235:685d5f11838f 79 e.g. To set DAC_OUT1 to 0.7V, use
mbed_official 235:685d5f11838f 80 Assuming that VREF+ = 3.3V, DAC_OUT1 = (3.3 * 868) / 4095 = 0.7V
mbed_official 235:685d5f11838f 81
mbed_official 235:685d5f11838f 82 *** DMA requests ***
mbed_official 235:685d5f11838f 83 =====================
mbed_official 235:685d5f11838f 84 [..]
mbed_official 235:685d5f11838f 85 A DMA1 request can be generated when an external trigger (but not
mbed_official 235:685d5f11838f 86 a software trigger) occurs if DMA1 requests are enabled using
mbed_official 235:685d5f11838f 87 HAL_DAC_Start_DMA()
mbed_official 235:685d5f11838f 88 [..]
mbed_official 235:685d5f11838f 89 DMA1 requests are mapped as following:
mbed_official 235:685d5f11838f 90 (#) DAC channel1 : mapped on DMA1 Stream5 channel7 which must be
mbed_official 235:685d5f11838f 91 already configured
mbed_official 235:685d5f11838f 92 (#) DAC channel2 : mapped on DMA1 Stream6 channel7 which must be
mbed_official 235:685d5f11838f 93 already configured
mbed_official 235:685d5f11838f 94
mbed_official 235:685d5f11838f 95 -@- For Dual mode and specific signal (Triangle and noise) generation please
mbed_official 235:685d5f11838f 96 refer to Extension Features Driver description
mbed_official 235:685d5f11838f 97
mbed_official 235:685d5f11838f 98
mbed_official 235:685d5f11838f 99 ##### How to use this driver #####
mbed_official 235:685d5f11838f 100 ==============================================================================
mbed_official 235:685d5f11838f 101 [..]
mbed_official 235:685d5f11838f 102 (+) DAC APB clock must be enabled to get write access to DAC
mbed_official 235:685d5f11838f 103 registers using HAL_DAC_Init()
mbed_official 235:685d5f11838f 104 (+) Configure DAC_OUTx (DAC_OUT1: PA4, DAC_OUT2: PA5) in analog mode.
mbed_official 235:685d5f11838f 105 (+) Configure the DAC channel using HAL_DAC_ConfigChannel() function.
mbed_official 235:685d5f11838f 106 (+) Enable the DAC channel using HAL_DAC_Start() or HAL_DAC_Start_DMA functions
mbed_official 235:685d5f11838f 107
mbed_official 235:685d5f11838f 108 *** Polling mode IO operation ***
mbed_official 235:685d5f11838f 109 =================================
mbed_official 235:685d5f11838f 110 [..]
mbed_official 235:685d5f11838f 111 (+) Start the DAC peripheral using HAL_DAC_Start()
mbed_official 235:685d5f11838f 112 (+) To read the DAC last data output value value, use the HAL_DAC_GetValue() function.
mbed_official 235:685d5f11838f 113 (+) Stop the DAC peripheral using HAL_DAC_Stop()
mbed_official 235:685d5f11838f 114
mbed_official 235:685d5f11838f 115 *** DMA mode IO operation ***
mbed_official 235:685d5f11838f 116 ==============================
mbed_official 235:685d5f11838f 117 [..]
mbed_official 235:685d5f11838f 118 (+) Start the DAC peripheral using HAL_DAC_Start_DMA(), at this stage the user specify the length
mbed_official 235:685d5f11838f 119 of data to be transferred at each end of conversion
mbed_official 235:685d5f11838f 120 (+) At The end of data transfer HAL_DAC_ConvCpltCallbackCh1()or HAL_DAC_ConvCpltCallbackCh2()
mbed_official 235:685d5f11838f 121 function is executed and user can add his own code by customization of function pointer
mbed_official 235:685d5f11838f 122 HAL_DAC_ConvCpltCallbackCh1 or HAL_DAC_ConvCpltCallbackCh2
mbed_official 235:685d5f11838f 123 (+) In case of transfer Error, HAL_DAC_ErrorCallbackCh1() function is executed and user can
mbed_official 235:685d5f11838f 124 add his own code by customization of function pointer HAL_DAC_ErrorCallbackCh1
mbed_official 235:685d5f11838f 125 (+) Stop the DAC peripheral using HAL_DAC_Stop_DMA()
mbed_official 235:685d5f11838f 126
mbed_official 235:685d5f11838f 127 *** DAC HAL driver macros list ***
mbed_official 235:685d5f11838f 128 =============================================
mbed_official 235:685d5f11838f 129 [..]
mbed_official 235:685d5f11838f 130 Below the list of most used macros in DAC HAL driver.
mbed_official 235:685d5f11838f 131
mbed_official 235:685d5f11838f 132 (+) __HAL_DAC_ENABLE : Enable the DAC peripheral
mbed_official 235:685d5f11838f 133 (+) __HAL_DAC_DISABLE : Disable the DAC peripheral
mbed_official 235:685d5f11838f 134 (+) __HAL_DAC_CLEAR_FLAG: Clear the DAC's pending flags
mbed_official 235:685d5f11838f 135 (+) __HAL_DAC_GET_FLAG: Get the selected DAC's flag status
mbed_official 235:685d5f11838f 136
mbed_official 235:685d5f11838f 137 [..]
mbed_official 235:685d5f11838f 138 (@) You can refer to the DAC HAL driver header file for more useful macros
mbed_official 235:685d5f11838f 139
mbed_official 235:685d5f11838f 140 @endverbatim
mbed_official 235:685d5f11838f 141 ******************************************************************************
mbed_official 235:685d5f11838f 142 * @attention
mbed_official 235:685d5f11838f 143 *
mbed_official 235:685d5f11838f 144 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 145 *
mbed_official 235:685d5f11838f 146 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 147 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 148 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 149 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 150 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 151 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 152 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 153 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 154 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 155 * without specific prior written permission.
mbed_official 235:685d5f11838f 156 *
mbed_official 235:685d5f11838f 157 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 158 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 159 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 160 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 161 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 162 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 163 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 164 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 165 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 166 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 167 *
mbed_official 235:685d5f11838f 168 ******************************************************************************
mbed_official 235:685d5f11838f 169 */
mbed_official 235:685d5f11838f 170
mbed_official 235:685d5f11838f 171
mbed_official 235:685d5f11838f 172 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 173 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 174
mbed_official 235:685d5f11838f 175 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 176 * @{
mbed_official 235:685d5f11838f 177 */
mbed_official 235:685d5f11838f 178
mbed_official 235:685d5f11838f 179 /** @defgroup DAC
mbed_official 235:685d5f11838f 180 * @brief DAC driver modules
mbed_official 235:685d5f11838f 181 * @{
mbed_official 235:685d5f11838f 182 */
mbed_official 235:685d5f11838f 183
mbed_official 235:685d5f11838f 184 #ifdef HAL_DAC_MODULE_ENABLED
mbed_official 235:685d5f11838f 185
mbed_official 235:685d5f11838f 186 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
mbed_official 235:685d5f11838f 187 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 188 /* Private define ------------------------------------------------------------*/
mbed_official 235:685d5f11838f 189 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 190 /* Private variables ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 191 /* Private function prototypes -----------------------------------------------*/
mbed_official 235:685d5f11838f 192 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 193 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 194 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 195
mbed_official 235:685d5f11838f 196 /* Private functions ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 197
mbed_official 235:685d5f11838f 198 /** @defgroup DAC_Private_Functions
mbed_official 235:685d5f11838f 199 * @{
mbed_official 235:685d5f11838f 200 */
mbed_official 235:685d5f11838f 201
mbed_official 235:685d5f11838f 202 /** @defgroup DAC_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 203 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 204 *
mbed_official 235:685d5f11838f 205 @verbatim
mbed_official 235:685d5f11838f 206 ==============================================================================
mbed_official 235:685d5f11838f 207 ##### Initialization and de-initialization functions #####
mbed_official 235:685d5f11838f 208 ==============================================================================
mbed_official 235:685d5f11838f 209 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 210 (+) Initialize and configure the DAC.
mbed_official 235:685d5f11838f 211 (+) De-initialize the DAC.
mbed_official 235:685d5f11838f 212
mbed_official 235:685d5f11838f 213 @endverbatim
mbed_official 235:685d5f11838f 214 * @{
mbed_official 235:685d5f11838f 215 */
mbed_official 235:685d5f11838f 216
mbed_official 235:685d5f11838f 217 /**
mbed_official 235:685d5f11838f 218 * @brief Initializes the DAC peripheral according to the specified parameters
mbed_official 235:685d5f11838f 219 * in the DAC_InitStruct.
mbed_official 235:685d5f11838f 220 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 221 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 222 * @retval HAL status
mbed_official 235:685d5f11838f 223 */
mbed_official 235:685d5f11838f 224 HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 225 {
mbed_official 235:685d5f11838f 226 /* Check DAC handle */
mbed_official 235:685d5f11838f 227 if(hdac == NULL)
mbed_official 235:685d5f11838f 228 {
mbed_official 235:685d5f11838f 229 return HAL_ERROR;
mbed_official 235:685d5f11838f 230 }
mbed_official 235:685d5f11838f 231 /* Check the parameters */
mbed_official 235:685d5f11838f 232 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
mbed_official 235:685d5f11838f 233
mbed_official 235:685d5f11838f 234 if(hdac->State == HAL_DAC_STATE_RESET)
mbed_official 235:685d5f11838f 235 {
mbed_official 235:685d5f11838f 236 /* Init the low level hardware */
mbed_official 235:685d5f11838f 237 HAL_DAC_MspInit(hdac);
mbed_official 235:685d5f11838f 238 }
mbed_official 235:685d5f11838f 239
mbed_official 235:685d5f11838f 240 /* Initialize the DAC state*/
mbed_official 235:685d5f11838f 241 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 235:685d5f11838f 242
mbed_official 235:685d5f11838f 243 /* Set DAC error code to none */
mbed_official 235:685d5f11838f 244 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
mbed_official 235:685d5f11838f 245
mbed_official 235:685d5f11838f 246 /* Initialize the DAC state*/
mbed_official 235:685d5f11838f 247 hdac->State = HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 248
mbed_official 235:685d5f11838f 249 /* Return function status */
mbed_official 235:685d5f11838f 250 return HAL_OK;
mbed_official 235:685d5f11838f 251 }
mbed_official 235:685d5f11838f 252
mbed_official 235:685d5f11838f 253 /**
mbed_official 235:685d5f11838f 254 * @brief Deinitializes the DAC peripheral registers to their default reset values.
mbed_official 235:685d5f11838f 255 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 256 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 257 * @retval HAL status
mbed_official 235:685d5f11838f 258 */
mbed_official 235:685d5f11838f 259 HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 260 {
mbed_official 235:685d5f11838f 261 /* Check DAC handle */
mbed_official 235:685d5f11838f 262 if(hdac == NULL)
mbed_official 235:685d5f11838f 263 {
mbed_official 235:685d5f11838f 264 return HAL_ERROR;
mbed_official 235:685d5f11838f 265 }
mbed_official 235:685d5f11838f 266
mbed_official 235:685d5f11838f 267 /* Check the parameters */
mbed_official 235:685d5f11838f 268 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
mbed_official 235:685d5f11838f 269
mbed_official 235:685d5f11838f 270 /* Change DAC state */
mbed_official 235:685d5f11838f 271 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 235:685d5f11838f 272
mbed_official 235:685d5f11838f 273 /* DeInit the low level hardware */
mbed_official 235:685d5f11838f 274 HAL_DAC_MspDeInit(hdac);
mbed_official 235:685d5f11838f 275
mbed_official 235:685d5f11838f 276 /* Set DAC error code to none */
mbed_official 235:685d5f11838f 277 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
mbed_official 235:685d5f11838f 278
mbed_official 235:685d5f11838f 279 /* Change DAC state */
mbed_official 235:685d5f11838f 280 hdac->State = HAL_DAC_STATE_RESET;
mbed_official 235:685d5f11838f 281
mbed_official 235:685d5f11838f 282 /* Release Lock */
mbed_official 235:685d5f11838f 283 __HAL_UNLOCK(hdac);
mbed_official 235:685d5f11838f 284
mbed_official 235:685d5f11838f 285 /* Return function status */
mbed_official 235:685d5f11838f 286 return HAL_OK;
mbed_official 235:685d5f11838f 287 }
mbed_official 235:685d5f11838f 288
mbed_official 235:685d5f11838f 289 /**
mbed_official 235:685d5f11838f 290 * @brief Initializes the DAC MSP.
mbed_official 235:685d5f11838f 291 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 292 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 293 * @retval None
mbed_official 235:685d5f11838f 294 */
mbed_official 235:685d5f11838f 295 __weak void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 296 {
mbed_official 235:685d5f11838f 297 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 298 the HAL_DAC_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 299 */
mbed_official 235:685d5f11838f 300 }
mbed_official 235:685d5f11838f 301
mbed_official 235:685d5f11838f 302 /**
mbed_official 235:685d5f11838f 303 * @brief DeInitializes the DAC MSP.
mbed_official 235:685d5f11838f 304 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 305 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 306 * @retval None
mbed_official 235:685d5f11838f 307 */
mbed_official 235:685d5f11838f 308 __weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 309 {
mbed_official 235:685d5f11838f 310 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 311 the HAL_DAC_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 312 */
mbed_official 235:685d5f11838f 313 }
mbed_official 235:685d5f11838f 314
mbed_official 235:685d5f11838f 315 /**
mbed_official 235:685d5f11838f 316 * @}
mbed_official 235:685d5f11838f 317 */
mbed_official 235:685d5f11838f 318
mbed_official 235:685d5f11838f 319 /** @defgroup DAC_Group2 IO operation functions
mbed_official 235:685d5f11838f 320 * @brief IO operation functions
mbed_official 235:685d5f11838f 321 *
mbed_official 235:685d5f11838f 322 @verbatim
mbed_official 235:685d5f11838f 323 ==============================================================================
mbed_official 235:685d5f11838f 324 ##### IO operation functions #####
mbed_official 235:685d5f11838f 325 ==============================================================================
mbed_official 235:685d5f11838f 326 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 327 (+) Start conversion.
mbed_official 235:685d5f11838f 328 (+) Stop conversion.
mbed_official 235:685d5f11838f 329 (+) Start conversion and enable DMA transfer.
mbed_official 235:685d5f11838f 330 (+) Stop conversion and disable DMA transfer.
mbed_official 235:685d5f11838f 331 (+) Get result of conversion.
mbed_official 235:685d5f11838f 332
mbed_official 235:685d5f11838f 333 @endverbatim
mbed_official 235:685d5f11838f 334 * @{
mbed_official 235:685d5f11838f 335 */
mbed_official 235:685d5f11838f 336
mbed_official 235:685d5f11838f 337 /**
mbed_official 235:685d5f11838f 338 * @brief Enables DAC and starts conversion of channel.
mbed_official 235:685d5f11838f 339 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 340 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 341 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 342 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 343 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 344 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 345 * @retval HAL status
mbed_official 235:685d5f11838f 346 */
mbed_official 235:685d5f11838f 347 HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 235:685d5f11838f 348 {
mbed_official 235:685d5f11838f 349 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 235:685d5f11838f 350
mbed_official 235:685d5f11838f 351 /* Check the parameters */
mbed_official 235:685d5f11838f 352 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 353
mbed_official 235:685d5f11838f 354 /* Process locked */
mbed_official 235:685d5f11838f 355 __HAL_LOCK(hdac);
mbed_official 235:685d5f11838f 356
mbed_official 235:685d5f11838f 357 /* Change DAC state */
mbed_official 235:685d5f11838f 358 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 235:685d5f11838f 359
mbed_official 235:685d5f11838f 360 /* Enable the Peripharal */
mbed_official 235:685d5f11838f 361 __HAL_DAC_ENABLE(hdac, Channel);
mbed_official 235:685d5f11838f 362
mbed_official 235:685d5f11838f 363 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 364 {
mbed_official 235:685d5f11838f 365 tmp1 = hdac->Instance->CR & DAC_CR_TEN1;
mbed_official 235:685d5f11838f 366 tmp2 = hdac->Instance->CR & DAC_CR_TSEL1;
mbed_official 235:685d5f11838f 367 /* Check if software trigger enabled */
mbed_official 235:685d5f11838f 368 if((tmp1 == DAC_CR_TEN1) && (tmp2 == DAC_CR_TSEL1))
mbed_official 235:685d5f11838f 369 {
mbed_official 235:685d5f11838f 370 /* Enable the selected DAC software conversion */
mbed_official 235:685d5f11838f 371 hdac->Instance->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1;
mbed_official 235:685d5f11838f 372 }
mbed_official 235:685d5f11838f 373 }
mbed_official 235:685d5f11838f 374 else
mbed_official 235:685d5f11838f 375 {
mbed_official 235:685d5f11838f 376 tmp1 = hdac->Instance->CR & DAC_CR_TEN2;
mbed_official 235:685d5f11838f 377 tmp2 = hdac->Instance->CR & DAC_CR_TSEL2;
mbed_official 235:685d5f11838f 378 /* Check if software trigger enabled */
mbed_official 235:685d5f11838f 379 if((tmp1 == DAC_CR_TEN2) && (tmp2 == DAC_CR_TSEL2))
mbed_official 235:685d5f11838f 380 {
mbed_official 235:685d5f11838f 381 /* Enable the selected DAC software conversion*/
mbed_official 235:685d5f11838f 382 hdac->Instance->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG2;
mbed_official 235:685d5f11838f 383 }
mbed_official 235:685d5f11838f 384 }
mbed_official 235:685d5f11838f 385
mbed_official 235:685d5f11838f 386 /* Change DAC state */
mbed_official 235:685d5f11838f 387 hdac->State = HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 388
mbed_official 235:685d5f11838f 389 /* Process unlocked */
mbed_official 235:685d5f11838f 390 __HAL_UNLOCK(hdac);
mbed_official 235:685d5f11838f 391
mbed_official 235:685d5f11838f 392 /* Return function status */
mbed_official 235:685d5f11838f 393 return HAL_OK;
mbed_official 235:685d5f11838f 394 }
mbed_official 235:685d5f11838f 395
mbed_official 235:685d5f11838f 396 /**
mbed_official 235:685d5f11838f 397 * @brief Disables DAC and stop conversion of channel.
mbed_official 235:685d5f11838f 398 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 399 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 400 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 401 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 402 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 403 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 404 * @retval HAL status
mbed_official 235:685d5f11838f 405 */
mbed_official 235:685d5f11838f 406 HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 235:685d5f11838f 407 {
mbed_official 235:685d5f11838f 408 /* Check the parameters */
mbed_official 235:685d5f11838f 409 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 410
mbed_official 235:685d5f11838f 411 /* Disable the Peripheral */
mbed_official 235:685d5f11838f 412 __HAL_DAC_DISABLE(hdac, Channel);
mbed_official 235:685d5f11838f 413
mbed_official 235:685d5f11838f 414 /* Change DAC state */
mbed_official 235:685d5f11838f 415 hdac->State = HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 416
mbed_official 235:685d5f11838f 417 /* Return function status */
mbed_official 235:685d5f11838f 418 return HAL_OK;
mbed_official 235:685d5f11838f 419 }
mbed_official 235:685d5f11838f 420
mbed_official 235:685d5f11838f 421 /**
mbed_official 235:685d5f11838f 422 * @brief Enables DAC and starts conversion of channel.
mbed_official 235:685d5f11838f 423 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 424 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 425 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 426 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 427 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 428 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 429 * @param pData: The destination peripheral Buffer address.
mbed_official 235:685d5f11838f 430 * @param Length: The length of data to be transferred from memory to DAC peripheral
mbed_official 235:685d5f11838f 431 * @param Alignment: Specifies the data alignment for DAC channel.
mbed_official 235:685d5f11838f 432 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 433 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
mbed_official 235:685d5f11838f 434 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
mbed_official 235:685d5f11838f 435 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
mbed_official 235:685d5f11838f 436 * @retval HAL status
mbed_official 235:685d5f11838f 437 */
mbed_official 235:685d5f11838f 438 HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment)
mbed_official 235:685d5f11838f 439 {
mbed_official 235:685d5f11838f 440 uint32_t tmpreg = 0;
mbed_official 235:685d5f11838f 441
mbed_official 235:685d5f11838f 442 /* Check the parameters */
mbed_official 235:685d5f11838f 443 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 444 assert_param(IS_DAC_ALIGN(Alignment));
mbed_official 235:685d5f11838f 445
mbed_official 235:685d5f11838f 446 /* Process locked */
mbed_official 235:685d5f11838f 447 __HAL_LOCK(hdac);
mbed_official 235:685d5f11838f 448
mbed_official 235:685d5f11838f 449 /* Change DAC state */
mbed_official 235:685d5f11838f 450 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 235:685d5f11838f 451
mbed_official 235:685d5f11838f 452 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 453 {
mbed_official 235:685d5f11838f 454 /* Set the DMA transfer complete callback for channel1 */
mbed_official 235:685d5f11838f 455 hdac->DMA_Handle1->XferCpltCallback = DAC_DMAConvCpltCh1;
mbed_official 235:685d5f11838f 456
mbed_official 235:685d5f11838f 457 /* Set the DMA half transfer complete callback for channel1 */
mbed_official 235:685d5f11838f 458 hdac->DMA_Handle1->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh1;
mbed_official 235:685d5f11838f 459
mbed_official 235:685d5f11838f 460 /* Set the DMA error callback for channel1 */
mbed_official 235:685d5f11838f 461 hdac->DMA_Handle1->XferErrorCallback = DAC_DMAErrorCh1;
mbed_official 235:685d5f11838f 462
mbed_official 235:685d5f11838f 463 /* Enable the selected DAC channel1 DMA request */
mbed_official 235:685d5f11838f 464 hdac->Instance->CR |= DAC_CR_DMAEN1;
mbed_official 235:685d5f11838f 465
mbed_official 235:685d5f11838f 466 /* Case of use of channel 1 */
mbed_official 235:685d5f11838f 467 switch(Alignment)
mbed_official 235:685d5f11838f 468 {
mbed_official 235:685d5f11838f 469 case DAC_ALIGN_12B_R:
mbed_official 235:685d5f11838f 470 /* Get DHR12R1 address */
mbed_official 235:685d5f11838f 471 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
mbed_official 235:685d5f11838f 472 break;
mbed_official 235:685d5f11838f 473 case DAC_ALIGN_12B_L:
mbed_official 235:685d5f11838f 474 /* Get DHR12L1 address */
mbed_official 235:685d5f11838f 475 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
mbed_official 235:685d5f11838f 476 break;
mbed_official 235:685d5f11838f 477 case DAC_ALIGN_8B_R:
mbed_official 235:685d5f11838f 478 /* Get DHR8R1 address */
mbed_official 235:685d5f11838f 479 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
mbed_official 235:685d5f11838f 480 break;
mbed_official 235:685d5f11838f 481 default:
mbed_official 235:685d5f11838f 482 break;
mbed_official 235:685d5f11838f 483 }
mbed_official 235:685d5f11838f 484 }
mbed_official 235:685d5f11838f 485 else
mbed_official 235:685d5f11838f 486 {
mbed_official 235:685d5f11838f 487 /* Set the DMA transfer complete callback for channel2 */
mbed_official 235:685d5f11838f 488 hdac->DMA_Handle2->XferCpltCallback = DAC_DMAConvCpltCh2;
mbed_official 235:685d5f11838f 489
mbed_official 235:685d5f11838f 490 /* Set the DMA half transfer complete callback for channel2 */
mbed_official 235:685d5f11838f 491 hdac->DMA_Handle2->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh2;
mbed_official 235:685d5f11838f 492
mbed_official 235:685d5f11838f 493 /* Set the DMA error callback for channel2 */
mbed_official 235:685d5f11838f 494 hdac->DMA_Handle2->XferErrorCallback = DAC_DMAErrorCh2;
mbed_official 235:685d5f11838f 495
mbed_official 235:685d5f11838f 496 /* Enable the selected DAC channel2 DMA request */
mbed_official 235:685d5f11838f 497 hdac->Instance->CR |= DAC_CR_DMAEN2;
mbed_official 235:685d5f11838f 498
mbed_official 235:685d5f11838f 499 /* Case of use of channel 2 */
mbed_official 235:685d5f11838f 500 switch(Alignment)
mbed_official 235:685d5f11838f 501 {
mbed_official 235:685d5f11838f 502 case DAC_ALIGN_12B_R:
mbed_official 235:685d5f11838f 503 /* Get DHR12R2 address */
mbed_official 235:685d5f11838f 504 tmpreg = (uint32_t)&hdac->Instance->DHR12R2;
mbed_official 235:685d5f11838f 505 break;
mbed_official 235:685d5f11838f 506 case DAC_ALIGN_12B_L:
mbed_official 235:685d5f11838f 507 /* Get DHR12L2 address */
mbed_official 235:685d5f11838f 508 tmpreg = (uint32_t)&hdac->Instance->DHR12L2;
mbed_official 235:685d5f11838f 509 break;
mbed_official 235:685d5f11838f 510 case DAC_ALIGN_8B_R:
mbed_official 235:685d5f11838f 511 /* Get DHR8R2 address */
mbed_official 235:685d5f11838f 512 tmpreg = (uint32_t)&hdac->Instance->DHR8R2;
mbed_official 235:685d5f11838f 513 break;
mbed_official 235:685d5f11838f 514 default:
mbed_official 235:685d5f11838f 515 break;
mbed_official 235:685d5f11838f 516 }
mbed_official 235:685d5f11838f 517 }
mbed_official 235:685d5f11838f 518
mbed_official 235:685d5f11838f 519 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 520 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 521 {
mbed_official 235:685d5f11838f 522 /* Enable the DAC DMA underrun interrupt */
mbed_official 235:685d5f11838f 523 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR1);
mbed_official 235:685d5f11838f 524
mbed_official 235:685d5f11838f 525 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 526 HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
mbed_official 235:685d5f11838f 527 }
mbed_official 235:685d5f11838f 528 else
mbed_official 235:685d5f11838f 529 {
mbed_official 235:685d5f11838f 530 /* Enable the DAC DMA underrun interrupt */
mbed_official 235:685d5f11838f 531 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR2);
mbed_official 235:685d5f11838f 532
mbed_official 235:685d5f11838f 533 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 534 HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length);
mbed_official 235:685d5f11838f 535 }
mbed_official 235:685d5f11838f 536
mbed_official 235:685d5f11838f 537 /* Enable the Peripharal */
mbed_official 235:685d5f11838f 538 __HAL_DAC_ENABLE(hdac, Channel);
mbed_official 235:685d5f11838f 539
mbed_official 235:685d5f11838f 540 /* Process Unlocked */
mbed_official 235:685d5f11838f 541 __HAL_UNLOCK(hdac);
mbed_official 235:685d5f11838f 542
mbed_official 235:685d5f11838f 543 /* Return function status */
mbed_official 235:685d5f11838f 544 return HAL_OK;
mbed_official 235:685d5f11838f 545 }
mbed_official 235:685d5f11838f 546
mbed_official 235:685d5f11838f 547 /**
mbed_official 235:685d5f11838f 548 * @brief Disables DAC and stop conversion of channel.
mbed_official 235:685d5f11838f 549 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 550 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 551 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 552 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 553 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 554 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 555 * @retval HAL status
mbed_official 235:685d5f11838f 556 */
mbed_official 235:685d5f11838f 557 HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 235:685d5f11838f 558 {
mbed_official 235:685d5f11838f 559 HAL_StatusTypeDef status = HAL_OK;
mbed_official 235:685d5f11838f 560
mbed_official 235:685d5f11838f 561 /* Check the parameters */
mbed_official 235:685d5f11838f 562 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 563
mbed_official 235:685d5f11838f 564 /* Disable the selected DAC channel DMA request */
mbed_official 235:685d5f11838f 565 hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << Channel);
mbed_official 235:685d5f11838f 566
mbed_official 235:685d5f11838f 567 /* Disable the Peripharal */
mbed_official 235:685d5f11838f 568 __HAL_DAC_DISABLE(hdac, Channel);
mbed_official 235:685d5f11838f 569
mbed_official 235:685d5f11838f 570 /* Disable the DMA Channel */
mbed_official 235:685d5f11838f 571 /* Channel1 is used */
mbed_official 235:685d5f11838f 572 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 573 {
mbed_official 235:685d5f11838f 574 status = HAL_DMA_Abort(hdac->DMA_Handle1);
mbed_official 235:685d5f11838f 575 }
mbed_official 235:685d5f11838f 576 else /* Channel2 is used for */
mbed_official 235:685d5f11838f 577 {
mbed_official 235:685d5f11838f 578 status = HAL_DMA_Abort(hdac->DMA_Handle2);
mbed_official 235:685d5f11838f 579 }
mbed_official 235:685d5f11838f 580
mbed_official 235:685d5f11838f 581 /* Check if DMA Channel effectively disabled */
mbed_official 235:685d5f11838f 582 if(status == HAL_ERROR)
mbed_official 235:685d5f11838f 583 {
mbed_official 235:685d5f11838f 584 /* Update ADC state machine to error */
mbed_official 235:685d5f11838f 585 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 235:685d5f11838f 586 }
mbed_official 235:685d5f11838f 587 else
mbed_official 235:685d5f11838f 588 {
mbed_official 235:685d5f11838f 589 /* Change DAC state */
mbed_official 235:685d5f11838f 590 hdac->State = HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 591 }
mbed_official 235:685d5f11838f 592
mbed_official 235:685d5f11838f 593 /* Return function status */
mbed_official 235:685d5f11838f 594 return status;
mbed_official 235:685d5f11838f 595 }
mbed_official 235:685d5f11838f 596
mbed_official 235:685d5f11838f 597 /**
mbed_official 235:685d5f11838f 598 * @brief Returns the last data output value of the selected DAC channel.
mbed_official 235:685d5f11838f 599 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 600 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 601 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 602 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 603 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 604 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 605 * @retval The selected DAC channel data output value.
mbed_official 235:685d5f11838f 606 */
mbed_official 235:685d5f11838f 607 uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 235:685d5f11838f 608 {
mbed_official 235:685d5f11838f 609 /* Check the parameters */
mbed_official 235:685d5f11838f 610 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 611
mbed_official 235:685d5f11838f 612 /* Returns the DAC channel data output register value */
mbed_official 235:685d5f11838f 613 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 614 {
mbed_official 235:685d5f11838f 615 return hdac->Instance->DOR1;
mbed_official 235:685d5f11838f 616 }
mbed_official 235:685d5f11838f 617 else
mbed_official 235:685d5f11838f 618 {
mbed_official 235:685d5f11838f 619 return hdac->Instance->DOR2;
mbed_official 235:685d5f11838f 620 }
mbed_official 235:685d5f11838f 621 }
mbed_official 235:685d5f11838f 622
mbed_official 235:685d5f11838f 623 /**
mbed_official 235:685d5f11838f 624 * @brief Handles DAC interrupt request
mbed_official 235:685d5f11838f 625 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 626 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 627 * @retval None
mbed_official 235:685d5f11838f 628 */
mbed_official 235:685d5f11838f 629 void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 630 {
mbed_official 235:685d5f11838f 631 /* Check Overrun flag */
mbed_official 235:685d5f11838f 632 if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR1))
mbed_official 235:685d5f11838f 633 {
mbed_official 235:685d5f11838f 634 /* Change DAC state to error state */
mbed_official 235:685d5f11838f 635 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 235:685d5f11838f 636
mbed_official 235:685d5f11838f 637 /* Set DAC error code to chanel1 DMA underrun error */
mbed_official 235:685d5f11838f 638 hdac->ErrorCode |= HAL_DAC_ERROR_DMAUNDERRUNCH1;
mbed_official 235:685d5f11838f 639
mbed_official 235:685d5f11838f 640 /* Clear the underrun flag */
mbed_official 235:685d5f11838f 641 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR1);
mbed_official 235:685d5f11838f 642
mbed_official 235:685d5f11838f 643 /* Disable the selected DAC channel1 DMA request */
mbed_official 235:685d5f11838f 644 hdac->Instance->CR &= ~DAC_CR_DMAEN1;
mbed_official 235:685d5f11838f 645
mbed_official 235:685d5f11838f 646 /* Error callback */
mbed_official 235:685d5f11838f 647 HAL_DAC_DMAUnderrunCallbackCh1(hdac);
mbed_official 235:685d5f11838f 648 }
mbed_official 235:685d5f11838f 649 else
mbed_official 235:685d5f11838f 650 {
mbed_official 235:685d5f11838f 651 /* Change DAC state to error state */
mbed_official 235:685d5f11838f 652 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 235:685d5f11838f 653
mbed_official 235:685d5f11838f 654 /* Set DAC error code to channel2 DMA underrun error */
mbed_official 235:685d5f11838f 655 hdac->ErrorCode |= HAL_DAC_ERROR_DMAUNDERRUNCH2;
mbed_official 235:685d5f11838f 656
mbed_official 235:685d5f11838f 657 /* Clear the underrun flag */
mbed_official 235:685d5f11838f 658 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR2);
mbed_official 235:685d5f11838f 659
mbed_official 235:685d5f11838f 660 /* Disable the selected DAC channel1 DMA request */
mbed_official 235:685d5f11838f 661 hdac->Instance->CR &= ~DAC_CR_DMAEN2;
mbed_official 235:685d5f11838f 662
mbed_official 235:685d5f11838f 663 /* Error callback */
mbed_official 235:685d5f11838f 664 HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
mbed_official 235:685d5f11838f 665 }
mbed_official 235:685d5f11838f 666 }
mbed_official 235:685d5f11838f 667
mbed_official 235:685d5f11838f 668 /**
mbed_official 235:685d5f11838f 669 * @brief Conversion complete callback in non blocking mode for Channel1
mbed_official 235:685d5f11838f 670 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 671 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 672 * @retval None
mbed_official 235:685d5f11838f 673 */
mbed_official 235:685d5f11838f 674 __weak void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 675 {
mbed_official 235:685d5f11838f 676 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 677 the HAL_DAC_ConvCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 678 */
mbed_official 235:685d5f11838f 679 }
mbed_official 235:685d5f11838f 680
mbed_official 235:685d5f11838f 681 /**
mbed_official 235:685d5f11838f 682 * @brief Conversion half DMA transfer callback in non blocking mode for Channel1
mbed_official 235:685d5f11838f 683 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 684 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 685 * @retval None
mbed_official 235:685d5f11838f 686 */
mbed_official 235:685d5f11838f 687 __weak void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 688 {
mbed_official 235:685d5f11838f 689 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 690 the HAL_DAC_ConvHalfCpltCallbackCh1 could be implemented in the user file
mbed_official 235:685d5f11838f 691 */
mbed_official 235:685d5f11838f 692 }
mbed_official 235:685d5f11838f 693
mbed_official 235:685d5f11838f 694 /**
mbed_official 235:685d5f11838f 695 * @brief Error DAC callback for Channel1.
mbed_official 235:685d5f11838f 696 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 697 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 698 * @retval None
mbed_official 235:685d5f11838f 699 */
mbed_official 235:685d5f11838f 700 __weak void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac)
mbed_official 235:685d5f11838f 701 {
mbed_official 235:685d5f11838f 702 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 703 the HAL_DAC_ErrorCallback could be implemented in the user file
mbed_official 235:685d5f11838f 704 */
mbed_official 235:685d5f11838f 705 }
mbed_official 235:685d5f11838f 706
mbed_official 235:685d5f11838f 707 /**
mbed_official 235:685d5f11838f 708 * @brief DMA underrun DAC callback for channel1.
mbed_official 235:685d5f11838f 709 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 710 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 711 * @retval None
mbed_official 235:685d5f11838f 712 */
mbed_official 235:685d5f11838f 713 __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
mbed_official 235:685d5f11838f 714 {
mbed_official 235:685d5f11838f 715 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 716 the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
mbed_official 235:685d5f11838f 717 */
mbed_official 235:685d5f11838f 718 }
mbed_official 235:685d5f11838f 719
mbed_official 235:685d5f11838f 720 /**
mbed_official 235:685d5f11838f 721 * @}
mbed_official 235:685d5f11838f 722 */
mbed_official 235:685d5f11838f 723
mbed_official 235:685d5f11838f 724 /** @defgroup DAC_Group3 Peripheral Control functions
mbed_official 235:685d5f11838f 725 * @brief Peripheral Control functions
mbed_official 235:685d5f11838f 726 *
mbed_official 235:685d5f11838f 727 @verbatim
mbed_official 235:685d5f11838f 728 ==============================================================================
mbed_official 235:685d5f11838f 729 ##### Peripheral Control functions #####
mbed_official 235:685d5f11838f 730 ==============================================================================
mbed_official 235:685d5f11838f 731 [..] This section provides functions allowing to:
mbed_official 235:685d5f11838f 732 (+) Configure channels.
mbed_official 235:685d5f11838f 733 (+) Set the specified data holding register value for DAC channel.
mbed_official 235:685d5f11838f 734
mbed_official 235:685d5f11838f 735 @endverbatim
mbed_official 235:685d5f11838f 736 * @{
mbed_official 235:685d5f11838f 737 */
mbed_official 235:685d5f11838f 738
mbed_official 235:685d5f11838f 739 /**
mbed_official 235:685d5f11838f 740 * @brief Configures the selected DAC channel.
mbed_official 235:685d5f11838f 741 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 742 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 743 * @param sConfig: DAC configuration structure.
mbed_official 235:685d5f11838f 744 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 745 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 746 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 747 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 748 * @retval HAL status
mbed_official 235:685d5f11838f 749 */
mbed_official 235:685d5f11838f 750 HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel)
mbed_official 235:685d5f11838f 751 {
mbed_official 235:685d5f11838f 752 uint32_t tmpreg1 = 0, tmpreg2 = 0;
mbed_official 235:685d5f11838f 753
mbed_official 235:685d5f11838f 754 /* Check the DAC parameters */
mbed_official 235:685d5f11838f 755 assert_param(IS_DAC_TRIGGER(sConfig->DAC_Trigger));
mbed_official 235:685d5f11838f 756 assert_param(IS_DAC_OUTPUT_BUFFER_STATE(sConfig->DAC_OutputBuffer));
mbed_official 235:685d5f11838f 757 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 758
mbed_official 235:685d5f11838f 759 /* Process locked */
mbed_official 235:685d5f11838f 760 __HAL_LOCK(hdac);
mbed_official 235:685d5f11838f 761
mbed_official 235:685d5f11838f 762 /* Change DAC state */
mbed_official 235:685d5f11838f 763 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 235:685d5f11838f 764
mbed_official 235:685d5f11838f 765 /* Get the DAC CR value */
mbed_official 235:685d5f11838f 766 tmpreg1 = DAC->CR;
mbed_official 235:685d5f11838f 767 /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
mbed_official 235:685d5f11838f 768 tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1 | DAC_CR_BOFF1)) << Channel);
mbed_official 235:685d5f11838f 769 /* Configure for the selected DAC channel: buffer output, trigger */
mbed_official 235:685d5f11838f 770 /* Set TSELx and TENx bits according to DAC_Trigger value */
mbed_official 235:685d5f11838f 771 /* Set BOFFx bit according to DAC_OutputBuffer value */
mbed_official 235:685d5f11838f 772 tmpreg2 = (sConfig->DAC_Trigger | sConfig->DAC_OutputBuffer);
mbed_official 235:685d5f11838f 773 /* Calculate CR register value depending on DAC_Channel */
mbed_official 235:685d5f11838f 774 tmpreg1 |= tmpreg2 << Channel;
mbed_official 235:685d5f11838f 775 /* Write to DAC CR */
mbed_official 235:685d5f11838f 776 DAC->CR = tmpreg1;
mbed_official 235:685d5f11838f 777 /* Disable wave generation */
mbed_official 235:685d5f11838f 778 DAC->CR &= ~(DAC_CR_WAVE1 << Channel);
mbed_official 235:685d5f11838f 779
mbed_official 235:685d5f11838f 780 /* Change DAC state */
mbed_official 235:685d5f11838f 781 hdac->State = HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 782
mbed_official 235:685d5f11838f 783 /* Process unlocked */
mbed_official 235:685d5f11838f 784 __HAL_UNLOCK(hdac);
mbed_official 235:685d5f11838f 785
mbed_official 235:685d5f11838f 786 /* Return function status */
mbed_official 235:685d5f11838f 787 return HAL_OK;
mbed_official 235:685d5f11838f 788 }
mbed_official 235:685d5f11838f 789
mbed_official 235:685d5f11838f 790 /**
mbed_official 235:685d5f11838f 791 * @brief Set the specified data holding register value for DAC channel.
mbed_official 235:685d5f11838f 792 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 793 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 794 * @param Channel: The selected DAC channel.
mbed_official 235:685d5f11838f 795 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 796 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 235:685d5f11838f 797 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 235:685d5f11838f 798 * @param Alignment: Specifies the data alignment.
mbed_official 235:685d5f11838f 799 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 800 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
mbed_official 235:685d5f11838f 801 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
mbed_official 235:685d5f11838f 802 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
mbed_official 235:685d5f11838f 803 * @param Data: Data to be loaded in the selected data holding register.
mbed_official 235:685d5f11838f 804 * @retval HAL status
mbed_official 235:685d5f11838f 805 */
mbed_official 235:685d5f11838f 806 HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
mbed_official 235:685d5f11838f 807 {
mbed_official 235:685d5f11838f 808 __IO uint32_t tmp = 0;
mbed_official 235:685d5f11838f 809
mbed_official 235:685d5f11838f 810 /* Check the parameters */
mbed_official 235:685d5f11838f 811 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 235:685d5f11838f 812 assert_param(IS_DAC_ALIGN(Alignment));
mbed_official 235:685d5f11838f 813 assert_param(IS_DAC_DATA(Data));
mbed_official 235:685d5f11838f 814
mbed_official 235:685d5f11838f 815 tmp = (uint32_t)hdac->Instance;
mbed_official 235:685d5f11838f 816 if(Channel == DAC_CHANNEL_1)
mbed_official 235:685d5f11838f 817 {
mbed_official 235:685d5f11838f 818 tmp += __HAL_DHR12R1_ALIGNEMENT(Alignment);
mbed_official 235:685d5f11838f 819 }
mbed_official 235:685d5f11838f 820 else
mbed_official 235:685d5f11838f 821 {
mbed_official 235:685d5f11838f 822 tmp += __HAL_DHR12R2_ALIGNEMENT(Alignment);
mbed_official 235:685d5f11838f 823 }
mbed_official 235:685d5f11838f 824
mbed_official 235:685d5f11838f 825 /* Set the DAC channel1 selected data holding register */
mbed_official 235:685d5f11838f 826 *(__IO uint32_t *) tmp = Data;
mbed_official 235:685d5f11838f 827
mbed_official 235:685d5f11838f 828 /* Return function status */
mbed_official 235:685d5f11838f 829 return HAL_OK;
mbed_official 235:685d5f11838f 830 }
mbed_official 235:685d5f11838f 831
mbed_official 235:685d5f11838f 832 /**
mbed_official 235:685d5f11838f 833 * @}
mbed_official 235:685d5f11838f 834 */
mbed_official 235:685d5f11838f 835
mbed_official 235:685d5f11838f 836 /** @defgroup DAC_Group4 Peripheral State and Errors functions
mbed_official 235:685d5f11838f 837 * @brief Peripheral State and Errors functions
mbed_official 235:685d5f11838f 838 *
mbed_official 235:685d5f11838f 839 @verbatim
mbed_official 235:685d5f11838f 840 ==============================================================================
mbed_official 235:685d5f11838f 841 ##### Peripheral State and Errors functions #####
mbed_official 235:685d5f11838f 842 ==============================================================================
mbed_official 235:685d5f11838f 843 [..]
mbed_official 235:685d5f11838f 844 This subsection provides functions allowing to
mbed_official 235:685d5f11838f 845 (+) Check the DAC state.
mbed_official 235:685d5f11838f 846 (+) Check the DAC Errors.
mbed_official 235:685d5f11838f 847
mbed_official 235:685d5f11838f 848 @endverbatim
mbed_official 235:685d5f11838f 849 * @{
mbed_official 235:685d5f11838f 850 */
mbed_official 235:685d5f11838f 851
mbed_official 235:685d5f11838f 852 /**
mbed_official 235:685d5f11838f 853 * @brief return the DAC state
mbed_official 235:685d5f11838f 854 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 855 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 856 * @retval HAL state
mbed_official 235:685d5f11838f 857 */
mbed_official 235:685d5f11838f 858 HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac)
mbed_official 235:685d5f11838f 859 {
mbed_official 235:685d5f11838f 860 /* Return DAC state */
mbed_official 235:685d5f11838f 861 return hdac->State;
mbed_official 235:685d5f11838f 862 }
mbed_official 235:685d5f11838f 863
mbed_official 235:685d5f11838f 864
mbed_official 235:685d5f11838f 865 /**
mbed_official 235:685d5f11838f 866 * @brief Return the DAC error code
mbed_official 235:685d5f11838f 867 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 868 * the configuration information for the specified DAC.
mbed_official 235:685d5f11838f 869 * @retval DAC Error Code
mbed_official 235:685d5f11838f 870 */
mbed_official 235:685d5f11838f 871 uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac)
mbed_official 235:685d5f11838f 872 {
mbed_official 235:685d5f11838f 873 return hdac->ErrorCode;
mbed_official 235:685d5f11838f 874 }
mbed_official 235:685d5f11838f 875
mbed_official 235:685d5f11838f 876 /**
mbed_official 235:685d5f11838f 877 * @}
mbed_official 235:685d5f11838f 878 */
mbed_official 235:685d5f11838f 879
mbed_official 235:685d5f11838f 880 /**
mbed_official 235:685d5f11838f 881 * @brief DMA conversion complete callback.
mbed_official 235:685d5f11838f 882 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 883 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 884 * @retval None
mbed_official 235:685d5f11838f 885 */
mbed_official 235:685d5f11838f 886 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 887 {
mbed_official 235:685d5f11838f 888 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 889
mbed_official 235:685d5f11838f 890 HAL_DAC_ConvCpltCallbackCh1(hdac);
mbed_official 235:685d5f11838f 891
mbed_official 235:685d5f11838f 892 hdac->State= HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 893 }
mbed_official 235:685d5f11838f 894
mbed_official 235:685d5f11838f 895 /**
mbed_official 235:685d5f11838f 896 * @brief DMA half transfer complete callback.
mbed_official 235:685d5f11838f 897 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 898 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 899 * @retval None
mbed_official 235:685d5f11838f 900 */
mbed_official 235:685d5f11838f 901 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 902 {
mbed_official 235:685d5f11838f 903 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 904 /* Conversion complete callback */
mbed_official 235:685d5f11838f 905 HAL_DAC_ConvHalfCpltCallbackCh1(hdac);
mbed_official 235:685d5f11838f 906 }
mbed_official 235:685d5f11838f 907
mbed_official 235:685d5f11838f 908 /**
mbed_official 235:685d5f11838f 909 * @brief DMA error callback
mbed_official 235:685d5f11838f 910 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 911 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 912 * @retval None
mbed_official 235:685d5f11838f 913 */
mbed_official 235:685d5f11838f 914 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 915 {
mbed_official 235:685d5f11838f 916 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 917
mbed_official 235:685d5f11838f 918 /* Set DAC error code to DMA error */
mbed_official 235:685d5f11838f 919 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
mbed_official 235:685d5f11838f 920
mbed_official 235:685d5f11838f 921 HAL_DAC_ErrorCallbackCh1(hdac);
mbed_official 235:685d5f11838f 922
mbed_official 235:685d5f11838f 923 hdac->State= HAL_DAC_STATE_READY;
mbed_official 235:685d5f11838f 924 }
mbed_official 235:685d5f11838f 925
mbed_official 235:685d5f11838f 926 /**
mbed_official 235:685d5f11838f 927 * @}
mbed_official 235:685d5f11838f 928 */
mbed_official 235:685d5f11838f 929 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
mbed_official 235:685d5f11838f 930 #endif /* HAL_DAC_MODULE_ENABLED */
mbed_official 235:685d5f11838f 931
mbed_official 235:685d5f11838f 932 /**
mbed_official 235:685d5f11838f 933 * @}
mbed_official 235:685d5f11838f 934 */
mbed_official 235:685d5f11838f 935
mbed_official 235:685d5f11838f 936 /**
mbed_official 235:685d5f11838f 937 * @}
mbed_official 235:685d5f11838f 938 */
mbed_official 235:685d5f11838f 939
mbed_official 235:685d5f11838f 940 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/