mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Fri Aug 14 13:15:17 2015 +0100
Revision:
610:813dcc80987e
Synchronized with git revision 6d84db41c6833e0b9b024741eb0616a5f62d5599

Full URL: https://github.com/mbedmicro/mbed/commit/6d84db41c6833e0b9b024741eb0616a5f62d5599/

DISCO_F746NG - Improvements

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 610:813dcc80987e 1 /**
mbed_official 610:813dcc80987e 2 ******************************************************************************
mbed_official 610:813dcc80987e 3 * @file stm32l4xx_hal_dac.c
mbed_official 610:813dcc80987e 4 * @author MCD Application Team
mbed_official 610:813dcc80987e 5 * @version V1.0.0
mbed_official 610:813dcc80987e 6 * @date 26-June-2015
mbed_official 610:813dcc80987e 7 * @brief DAC HAL module driver.
mbed_official 610:813dcc80987e 8 * This file provides firmware functions to manage the following
mbed_official 610:813dcc80987e 9 * functionalities of the Digital to Analog Converter (DAC) peripheral:
mbed_official 610:813dcc80987e 10 * + Initialization and de-initialization functions
mbed_official 610:813dcc80987e 11 * + IO operation functions
mbed_official 610:813dcc80987e 12 * + Peripheral Control functions
mbed_official 610:813dcc80987e 13 * + Peripheral State and Errors functions
mbed_official 610:813dcc80987e 14 *
mbed_official 610:813dcc80987e 15 *
mbed_official 610:813dcc80987e 16 @verbatim
mbed_official 610:813dcc80987e 17 ==============================================================================
mbed_official 610:813dcc80987e 18 ##### DAC Peripheral features #####
mbed_official 610:813dcc80987e 19 ==============================================================================
mbed_official 610:813dcc80987e 20 [..]
mbed_official 610:813dcc80987e 21 *** DAC Channels ***
mbed_official 610:813dcc80987e 22 ====================
mbed_official 610:813dcc80987e 23 [..]
mbed_official 610:813dcc80987e 24 STM32L4 devices integrate two 12-bit Digital Analog Converters
mbed_official 610:813dcc80987e 25
mbed_official 610:813dcc80987e 26 The 2 converters (i.e. channel1 & channel2)
mbed_official 610:813dcc80987e 27 can be used independently or simultaneously (dual mode):
mbed_official 610:813dcc80987e 28 (#) DAC channel1 with DAC_OUT1 (PA4) as output or connected to on-chip
mbed_official 610:813dcc80987e 29 peripherals (ex. OPAMPs, comparators).
mbed_official 610:813dcc80987e 30 (#) DAC channel2 with DAC_OUT2 (PA5) as output or connected to on-chip
mbed_official 610:813dcc80987e 31 peripherals (ex. OPAMPs, comparators).
mbed_official 610:813dcc80987e 32
mbed_official 610:813dcc80987e 33 *** DAC Triggers ***
mbed_official 610:813dcc80987e 34 ====================
mbed_official 610:813dcc80987e 35 [..]
mbed_official 610:813dcc80987e 36 Digital to Analog conversion can be non-triggered using DAC_TRIGGER_NONE
mbed_official 610:813dcc80987e 37 and DAC_OUT1/DAC_OUT2 is available once writing to DHRx register.
mbed_official 610:813dcc80987e 38 [..]
mbed_official 610:813dcc80987e 39 Digital to Analog conversion can be triggered by:
mbed_official 610:813dcc80987e 40 (#) External event: EXTI Line 9 (any GPIOx_PIN_9) using DAC_TRIGGER_EXT_IT9.
mbed_official 610:813dcc80987e 41 The used pin (GPIOx_PIN_9) must be configured in input mode.
mbed_official 610:813dcc80987e 42
mbed_official 610:813dcc80987e 43 (#) Timers TRGO: TIM2, TIM3, TIM4, TIM5, TIM6 and TIM7
mbed_official 610:813dcc80987e 44 (DAC_TRIGGER_T2_TRGO, DAC_TRIGGER_T3_TRGO...)
mbed_official 610:813dcc80987e 45
mbed_official 610:813dcc80987e 46 (#) Software using DAC_TRIGGER_SOFTWARE
mbed_official 610:813dcc80987e 47
mbed_official 610:813dcc80987e 48 *** DAC Buffer mode feature ***
mbed_official 610:813dcc80987e 49 ===============================
mbed_official 610:813dcc80987e 50 [..]
mbed_official 610:813dcc80987e 51 Each DAC channel integrates an output buffer that can be used to
mbed_official 610:813dcc80987e 52 reduce the output impedance, and to drive external loads directly
mbed_official 610:813dcc80987e 53 without having to add an external operational amplifier.
mbed_official 610:813dcc80987e 54 To enable, the output buffer use
mbed_official 610:813dcc80987e 55 sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
mbed_official 610:813dcc80987e 56 [..]
mbed_official 610:813dcc80987e 57 (@) Refer to the device datasheet for more details about output
mbed_official 610:813dcc80987e 58 impedance value with and without output buffer.
mbed_official 610:813dcc80987e 59
mbed_official 610:813dcc80987e 60 *** DAC connect feature ***
mbed_official 610:813dcc80987e 61 ===============================
mbed_official 610:813dcc80987e 62 [..]
mbed_official 610:813dcc80987e 63 Each DAC channel can be connected internally.
mbed_official 610:813dcc80987e 64 To connect, use
mbed_official 610:813dcc80987e 65 sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_ENABLE;
mbed_official 610:813dcc80987e 66
mbed_official 610:813dcc80987e 67 *** GPIO configurations guidelines ***
mbed_official 610:813dcc80987e 68 =====================
mbed_official 610:813dcc80987e 69 [..]
mbed_official 610:813dcc80987e 70 When a DAC channel is used (ex channel1 on PA4) and the other is not
mbed_official 610:813dcc80987e 71 (ex channel1 on PA5 is configured in Analog and disabled).
mbed_official 610:813dcc80987e 72 Channel1 may disturb channel2 as coupling effect.
mbed_official 610:813dcc80987e 73 Note that there is no coupling on channel2 as soon as channel2 is turned on.
mbed_official 610:813dcc80987e 74 Coupling on adjacent channel could be avoided as follows:
mbed_official 610:813dcc80987e 75 when unused PA5 is configured as INPUT PULL-UP or DOWN.
mbed_official 610:813dcc80987e 76 PA5 is configured in ANALOG just before it is turned on.
mbed_official 610:813dcc80987e 77
mbed_official 610:813dcc80987e 78 *** DAC Sample and Hold feature ***
mbed_official 610:813dcc80987e 79 ========================
mbed_official 610:813dcc80987e 80 [..]
mbed_official 610:813dcc80987e 81 For each converter, 2 modes are supported: normal mode and
mbed_official 610:813dcc80987e 82 "sample and hold" mode (i.e. low power mode).
mbed_official 610:813dcc80987e 83 In the sample and hold mode, the DAC core converts data, then holds the
mbed_official 610:813dcc80987e 84 converted voltage on a capacitor. When not converting, the DAC cores and
mbed_official 610:813dcc80987e 85 buffer are completely turned off between samples and the DAC output is
mbed_official 610:813dcc80987e 86 tri-stated, therefore reducing the overall power consumption. A new
mbed_official 610:813dcc80987e 87 stabilization period is needed before each new conversion.
mbed_official 610:813dcc80987e 88
mbed_official 610:813dcc80987e 89 The sample and hold allow setting internal or external voltage @
mbed_official 610:813dcc80987e 90 low power consumption cost (output value can be at any given rate either
mbed_official 610:813dcc80987e 91 by CPU or DMA).
mbed_official 610:813dcc80987e 92
mbed_official 610:813dcc80987e 93 The Sample and hold block and registers uses either LSI & run in
mbed_official 610:813dcc80987e 94 several power modes: run mode, sleep mode, low power run, low power sleep
mbed_official 610:813dcc80987e 95 mode & stop1 mode.
mbed_official 610:813dcc80987e 96
mbed_official 610:813dcc80987e 97 Low power stop1 mode allows only static conversion.
mbed_official 610:813dcc80987e 98
mbed_official 610:813dcc80987e 99 To enable Sample and Hold mode
mbed_official 610:813dcc80987e 100 Enable LSI using HAL_RCC_OscConfig with RCC_OSCILLATORTYPE_LSI &
mbed_official 610:813dcc80987e 101 RCC_LSI_ON parameters.
mbed_official 610:813dcc80987e 102
mbed_official 610:813dcc80987e 103 Use DAC_InitStructure.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_ENABLE;
mbed_official 610:813dcc80987e 104 & DAC_ChannelConfTypeDef.DAC_SampleAndHoldConfig.DAC_SampleTime,
mbed_official 610:813dcc80987e 105 DAC_HoldTime & DAC_RefreshTime;
mbed_official 610:813dcc80987e 106
mbed_official 610:813dcc80987e 107
mbed_official 610:813dcc80987e 108
mbed_official 610:813dcc80987e 109 *** DAC calibration feature ***
mbed_official 610:813dcc80987e 110 ===================================
mbed_official 610:813dcc80987e 111 [..]
mbed_official 610:813dcc80987e 112 (#) The 2 converters (channel1 & channel2) provide calibration capabilities.
mbed_official 610:813dcc80987e 113 (++) Calibration aims at correcting some offset of output buffer.
mbed_official 610:813dcc80987e 114 (++) The DAC uses either factory calibration settings OR user defined
mbed_official 610:813dcc80987e 115 calibration (trimming) settings (i.e. trimming mode).
mbed_official 610:813dcc80987e 116 (++) The user defined settings can be figured out using self calibration
mbed_official 610:813dcc80987e 117 handled by HAL_DACEx_SelfCalibrate.
mbed_official 610:813dcc80987e 118 (++) HAL_DACEx_SelfCalibrate:
mbed_official 610:813dcc80987e 119 (+++) Runs automatically the calibration.
mbed_official 610:813dcc80987e 120 (+++) Enables the user trimming mode
mbed_official 610:813dcc80987e 121 (+++) Updates a structure with trimming values with fresh calibration
mbed_official 610:813dcc80987e 122 results.
mbed_official 610:813dcc80987e 123 The user may store the calibration results for larger
mbed_official 610:813dcc80987e 124 (ex monitoring the trimming as a function of temperature
mbed_official 610:813dcc80987e 125 for instance)
mbed_official 610:813dcc80987e 126
mbed_official 610:813dcc80987e 127 *** DAC wave generation feature ***
mbed_official 610:813dcc80987e 128 ===================================
mbed_official 610:813dcc80987e 129 [..]
mbed_official 610:813dcc80987e 130 Both DAC channels can be used to generate
mbed_official 610:813dcc80987e 131 (#) Noise wave
mbed_official 610:813dcc80987e 132 (#) Triangle wave
mbed_official 610:813dcc80987e 133
mbed_official 610:813dcc80987e 134 *** DAC data format ***
mbed_official 610:813dcc80987e 135 =======================
mbed_official 610:813dcc80987e 136 [..]
mbed_official 610:813dcc80987e 137 The DAC data format can be:
mbed_official 610:813dcc80987e 138 (#) 8-bit right alignment using DAC_ALIGN_8B_R
mbed_official 610:813dcc80987e 139 (#) 12-bit left alignment using DAC_ALIGN_12B_L
mbed_official 610:813dcc80987e 140 (#) 12-bit right alignment using DAC_ALIGN_12B_R
mbed_official 610:813dcc80987e 141
mbed_official 610:813dcc80987e 142 *** DAC data value to voltage correspondence ***
mbed_official 610:813dcc80987e 143 ================================================
mbed_official 610:813dcc80987e 144 [..]
mbed_official 610:813dcc80987e 145 The analog output voltage on each DAC channel pin is determined
mbed_official 610:813dcc80987e 146 by the following equation:
mbed_official 610:813dcc80987e 147 [..]
mbed_official 610:813dcc80987e 148 DAC_OUTx = VREF+ * DOR / 4095
mbed_official 610:813dcc80987e 149 (+) with DOR is the Data Output Register
mbed_official 610:813dcc80987e 150 [..]
mbed_official 610:813dcc80987e 151 VEF+ is the input voltage reference (refer to the device datasheet)
mbed_official 610:813dcc80987e 152 [..]
mbed_official 610:813dcc80987e 153 e.g. To set DAC_OUT1 to 0.7V, use
mbed_official 610:813dcc80987e 154 (+) Assuming that VREF+ = 3.3V, DAC_OUT1 = (3.3 * 868) / 4095 = 0.7V
mbed_official 610:813dcc80987e 155
mbed_official 610:813dcc80987e 156 *** DMA requests ***
mbed_official 610:813dcc80987e 157 =====================
mbed_official 610:813dcc80987e 158 [..]
mbed_official 610:813dcc80987e 159 A DMA1 request can be generated when an external trigger (but not a software trigger)
mbed_official 610:813dcc80987e 160 occurs if DMA1 requests are enabled using HAL_DAC_Start_DMA().
mbed_official 610:813dcc80987e 161 DMA requests are mapped as following:
mbed_official 610:813dcc80987e 162 (#) DAC channel1: mapped either on
mbed_official 610:813dcc80987e 163 (++) DMA1 request 6 channel3
mbed_official 610:813dcc80987e 164 (++) or DMA2 request channel4 which must be already configured
mbed_official 610:813dcc80987e 165 (#) DAC channel2: mapped either on
mbed_official 610:813dcc80987e 166 (++) DMA1 request 5 channel4
mbed_official 610:813dcc80987e 167 (++) or DMA2 request 3 channel5 which must be already configured
mbed_official 610:813dcc80987e 168 [..]
mbed_official 610:813dcc80987e 169 (@) For Dual mode and specific signal (Triangle and noise) generation please
mbed_official 610:813dcc80987e 170 refer to Extended Features Driver description
mbed_official 610:813dcc80987e 171
mbed_official 610:813dcc80987e 172 ##### How to use this driver #####
mbed_official 610:813dcc80987e 173 ==============================================================================
mbed_official 610:813dcc80987e 174 [..]
mbed_official 610:813dcc80987e 175 (+) DAC APB clock must be enabled to get write access to DAC
mbed_official 610:813dcc80987e 176 registers using HAL_DAC_Init()
mbed_official 610:813dcc80987e 177 (+) Configure DAC_OUTx (DAC_OUT1: PA4, DAC_OUT2: PA5) in analog mode.
mbed_official 610:813dcc80987e 178 (+) Configure the DAC channel using HAL_DAC_ConfigChannel() function.
mbed_official 610:813dcc80987e 179 (+) Enable the DAC channel using HAL_DAC_Start() or HAL_DAC_Start_DMA() functions.
mbed_official 610:813dcc80987e 180
mbed_official 610:813dcc80987e 181 *** Calibration mode IO operation ***
mbed_official 610:813dcc80987e 182 ======================================
mbed_official 610:813dcc80987e 183 [..]
mbed_official 610:813dcc80987e 184 (+) Retrieve the factory trimming (calibration settings) using HAL_DACEx_GetTrimOffset()
mbed_official 610:813dcc80987e 185 (+) Run the calibration using HAL_DACEx_SelfCalibrate()
mbed_official 610:813dcc80987e 186 (+) Update the trimming while DAC running using HAL_DACEx_SetUserTrimming()
mbed_official 610:813dcc80987e 187
mbed_official 610:813dcc80987e 188 *** Polling mode IO operation ***
mbed_official 610:813dcc80987e 189 =================================
mbed_official 610:813dcc80987e 190 [..]
mbed_official 610:813dcc80987e 191 (+) Start the DAC peripheral using HAL_DAC_Start()
mbed_official 610:813dcc80987e 192 (+) To read the DAC last data output value, use the HAL_DAC_GetValue() function.
mbed_official 610:813dcc80987e 193 (+) Stop the DAC peripheral using HAL_DAC_Stop()
mbed_official 610:813dcc80987e 194
mbed_official 610:813dcc80987e 195 *** DMA mode IO operation ***
mbed_official 610:813dcc80987e 196 ==============================
mbed_official 610:813dcc80987e 197 [..]
mbed_official 610:813dcc80987e 198 (+) Start the DAC peripheral using HAL_DAC_Start_DMA(), at this stage the user specify the length
mbed_official 610:813dcc80987e 199 of data to be transferred at each end of conversion
mbed_official 610:813dcc80987e 200 (+) At the middle of data transfer HAL_DAC_ConvHalfCpltCallbackCh1() or HAL_DACEx_ConvHalfCpltCallbackCh2()
mbed_official 610:813dcc80987e 201 function is executed and user can add his own code by customization of function pointer
mbed_official 610:813dcc80987e 202 HAL_DAC_ConvHalfCpltCallbackCh1() or HAL_DACEx_ConvHalfCpltCallbackCh2()
mbed_official 610:813dcc80987e 203 (+) At The end of data transfer HAL_DAC_ConvCpltCallbackCh1() or HAL_DACEx_ConvHalfCpltCallbackCh2()
mbed_official 610:813dcc80987e 204 function is executed and user can add his own code by customization of function pointer
mbed_official 610:813dcc80987e 205 HAL_DAC_ConvCpltCallbackCh1() or HAL_DACEx_ConvHalfCpltCallbackCh2()
mbed_official 610:813dcc80987e 206 (+) In case of transfer Error, HAL_DAC_ErrorCallbackCh1() function is executed and user can
mbed_official 610:813dcc80987e 207 add his own code by customization of function pointer HAL_DAC_ErrorCallbackCh1
mbed_official 610:813dcc80987e 208 (+) In case of DMA underrun, DAC interruption triggers and execute internal function HAL_DAC_IRQHandler.
mbed_official 610:813dcc80987e 209 HAL_DAC_DMAUnderrunCallbackCh1() or HAL_DACEx_DMAUnderrunCallbackCh2()
mbed_official 610:813dcc80987e 210 function is executed and user can add his own code by customization of function pointer
mbed_official 610:813dcc80987e 211 HAL_DAC_DMAUnderrunCallbackCh1() or HAL_DACEx_DMAUnderrunCallbackCh2() and
mbed_official 610:813dcc80987e 212 add his own code by customization of function pointer HAL_DAC_ErrorCallbackCh1()
mbed_official 610:813dcc80987e 213 (+) Stop the DAC peripheral using HAL_DAC_Stop_DMA()
mbed_official 610:813dcc80987e 214
mbed_official 610:813dcc80987e 215 *** DAC HAL driver macros list ***
mbed_official 610:813dcc80987e 216 =============================================
mbed_official 610:813dcc80987e 217 [..]
mbed_official 610:813dcc80987e 218 Below the list of most used macros in DAC HAL driver.
mbed_official 610:813dcc80987e 219
mbed_official 610:813dcc80987e 220 (+) __HAL_DAC_ENABLE : Enable the DAC peripheral
mbed_official 610:813dcc80987e 221 (+) __HAL_DAC_DISABLE : Disable the DAC peripheral
mbed_official 610:813dcc80987e 222 (+) __HAL_DAC_CLEAR_FLAG: Clear the DAC's pending flags
mbed_official 610:813dcc80987e 223 (+) __HAL_DAC_GET_FLAG: Get the selected DAC's flag status
mbed_official 610:813dcc80987e 224
mbed_official 610:813dcc80987e 225 [..]
mbed_official 610:813dcc80987e 226 (@) You can refer to the DAC HAL driver header file for more useful macros
mbed_official 610:813dcc80987e 227
mbed_official 610:813dcc80987e 228 @endverbatim
mbed_official 610:813dcc80987e 229 ******************************************************************************
mbed_official 610:813dcc80987e 230 * @attention
mbed_official 610:813dcc80987e 231 *
mbed_official 610:813dcc80987e 232 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 610:813dcc80987e 233 *
mbed_official 610:813dcc80987e 234 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 610:813dcc80987e 235 * are permitted provided that the following conditions are met:
mbed_official 610:813dcc80987e 236 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 610:813dcc80987e 237 * this list of conditions and the following disclaimer.
mbed_official 610:813dcc80987e 238 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 610:813dcc80987e 239 * this list of conditions and the following disclaimer in the documentation
mbed_official 610:813dcc80987e 240 * and/or other materials provided with the distribution.
mbed_official 610:813dcc80987e 241 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 610:813dcc80987e 242 * may be used to endorse or promote products derived from this software
mbed_official 610:813dcc80987e 243 * without specific prior written permission.
mbed_official 610:813dcc80987e 244 *
mbed_official 610:813dcc80987e 245 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 610:813dcc80987e 246 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 610:813dcc80987e 247 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 610:813dcc80987e 248 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 610:813dcc80987e 249 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 610:813dcc80987e 250 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 610:813dcc80987e 251 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 610:813dcc80987e 252 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 610:813dcc80987e 253 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 610:813dcc80987e 254 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 610:813dcc80987e 255 *
mbed_official 610:813dcc80987e 256 ******************************************************************************
mbed_official 610:813dcc80987e 257 */
mbed_official 610:813dcc80987e 258
mbed_official 610:813dcc80987e 259
mbed_official 610:813dcc80987e 260 /* Includes ------------------------------------------------------------------*/
mbed_official 610:813dcc80987e 261 #include "stm32l4xx_hal.h"
mbed_official 610:813dcc80987e 262
mbed_official 610:813dcc80987e 263 /** @addtogroup STM32L4xx_HAL_Driver
mbed_official 610:813dcc80987e 264 * @{
mbed_official 610:813dcc80987e 265 */
mbed_official 610:813dcc80987e 266
mbed_official 610:813dcc80987e 267 /** @defgroup DAC DAC
mbed_official 610:813dcc80987e 268 * @brief DAC driver modules
mbed_official 610:813dcc80987e 269 * @{
mbed_official 610:813dcc80987e 270 */
mbed_official 610:813dcc80987e 271
mbed_official 610:813dcc80987e 272 #ifdef HAL_DAC_MODULE_ENABLED
mbed_official 610:813dcc80987e 273
mbed_official 610:813dcc80987e 274 /* Private typedef -----------------------------------------------------------*/
mbed_official 610:813dcc80987e 275 /* Private define ------------------------------------------------------------*/
mbed_official 610:813dcc80987e 276 /* Private constants ---------------------------------------------------------*/
mbed_official 610:813dcc80987e 277 /** @addtogroup DAC_Private_Constants DAC Private Constants
mbed_official 610:813dcc80987e 278 * @{
mbed_official 610:813dcc80987e 279 */
mbed_official 610:813dcc80987e 280 #define TIMEOUT_DAC_CALIBCONFIG ((uint32_t)1) /* 1ms */
mbed_official 610:813dcc80987e 281 /**
mbed_official 610:813dcc80987e 282 * @}
mbed_official 610:813dcc80987e 283 */
mbed_official 610:813dcc80987e 284
mbed_official 610:813dcc80987e 285 /* Private macro -------------------------------------------------------------*/
mbed_official 610:813dcc80987e 286 /* Private macro -------------------------------------------------------------*/
mbed_official 610:813dcc80987e 287 /* Private variables ---------------------------------------------------------*/
mbed_official 610:813dcc80987e 288 /* Private function prototypes -----------------------------------------------*/
mbed_official 610:813dcc80987e 289 /** @defgroup DAC_Private_Functions DAC Private Functions
mbed_official 610:813dcc80987e 290 * @{
mbed_official 610:813dcc80987e 291 */
mbed_official 610:813dcc80987e 292 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma);
mbed_official 610:813dcc80987e 293 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma);
mbed_official 610:813dcc80987e 294 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma);
mbed_official 610:813dcc80987e 295 /**
mbed_official 610:813dcc80987e 296 * @}
mbed_official 610:813dcc80987e 297 */
mbed_official 610:813dcc80987e 298 /* Exported functions -------------------------------------------------------*/
mbed_official 610:813dcc80987e 299
mbed_official 610:813dcc80987e 300 /** @defgroup DAC_Exported_Functions DAC Exported Functions
mbed_official 610:813dcc80987e 301 * @{
mbed_official 610:813dcc80987e 302 */
mbed_official 610:813dcc80987e 303
mbed_official 610:813dcc80987e 304 /** @defgroup DAC_Exported_Functions_Group1 Initialization and de-initialization functions
mbed_official 610:813dcc80987e 305 * @brief Initialization and Configuration functions
mbed_official 610:813dcc80987e 306 *
mbed_official 610:813dcc80987e 307 @verbatim
mbed_official 610:813dcc80987e 308 ==============================================================================
mbed_official 610:813dcc80987e 309 ##### Initialization and de-initialization functions #####
mbed_official 610:813dcc80987e 310 ==============================================================================
mbed_official 610:813dcc80987e 311 [..] This section provides functions allowing to:
mbed_official 610:813dcc80987e 312 (+) Initialize and configure the DAC.
mbed_official 610:813dcc80987e 313 (+) De-initialize the DAC.
mbed_official 610:813dcc80987e 314
mbed_official 610:813dcc80987e 315 @endverbatim
mbed_official 610:813dcc80987e 316 * @{
mbed_official 610:813dcc80987e 317 */
mbed_official 610:813dcc80987e 318
mbed_official 610:813dcc80987e 319 /**
mbed_official 610:813dcc80987e 320 * @brief Initialize the DAC peripheral according to the specified parameters
mbed_official 610:813dcc80987e 321 * in the DAC_InitStruct and initialize the associated handle.
mbed_official 610:813dcc80987e 322 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 323 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 324 * @retval HAL status
mbed_official 610:813dcc80987e 325 */
mbed_official 610:813dcc80987e 326 HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 327 {
mbed_official 610:813dcc80987e 328 /* Check DAC handle */
mbed_official 610:813dcc80987e 329 if(hdac == NULL)
mbed_official 610:813dcc80987e 330 {
mbed_official 610:813dcc80987e 331 return HAL_ERROR;
mbed_official 610:813dcc80987e 332 }
mbed_official 610:813dcc80987e 333 /* Check the parameters */
mbed_official 610:813dcc80987e 334 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
mbed_official 610:813dcc80987e 335
mbed_official 610:813dcc80987e 336 if(hdac->State == HAL_DAC_STATE_RESET)
mbed_official 610:813dcc80987e 337 {
mbed_official 610:813dcc80987e 338 /* Allocate lock resource and initialize it */
mbed_official 610:813dcc80987e 339 hdac->Lock = HAL_UNLOCKED;
mbed_official 610:813dcc80987e 340
mbed_official 610:813dcc80987e 341 /* Init the low level hardware */
mbed_official 610:813dcc80987e 342 HAL_DAC_MspInit(hdac);
mbed_official 610:813dcc80987e 343 }
mbed_official 610:813dcc80987e 344
mbed_official 610:813dcc80987e 345 /* Initialize the DAC state*/
mbed_official 610:813dcc80987e 346 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 610:813dcc80987e 347
mbed_official 610:813dcc80987e 348 /* Set DAC error code to none */
mbed_official 610:813dcc80987e 349 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
mbed_official 610:813dcc80987e 350
mbed_official 610:813dcc80987e 351 /* Initialize the DAC state*/
mbed_official 610:813dcc80987e 352 hdac->State = HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 353
mbed_official 610:813dcc80987e 354 /* Return function status */
mbed_official 610:813dcc80987e 355 return HAL_OK;
mbed_official 610:813dcc80987e 356 }
mbed_official 610:813dcc80987e 357
mbed_official 610:813dcc80987e 358 /**
mbed_official 610:813dcc80987e 359 * @brief Deinitialize the DAC peripheral registers to their default reset values.
mbed_official 610:813dcc80987e 360 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 361 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 362 * @retval HAL status
mbed_official 610:813dcc80987e 363 */
mbed_official 610:813dcc80987e 364 HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 365 {
mbed_official 610:813dcc80987e 366 /* Check DAC handle */
mbed_official 610:813dcc80987e 367 if(hdac == NULL)
mbed_official 610:813dcc80987e 368 {
mbed_official 610:813dcc80987e 369 return HAL_ERROR;
mbed_official 610:813dcc80987e 370 }
mbed_official 610:813dcc80987e 371
mbed_official 610:813dcc80987e 372 /* Check the parameters */
mbed_official 610:813dcc80987e 373 assert_param(IS_DAC_ALL_INSTANCE(hdac->Instance));
mbed_official 610:813dcc80987e 374
mbed_official 610:813dcc80987e 375 /* Change DAC state */
mbed_official 610:813dcc80987e 376 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 610:813dcc80987e 377
mbed_official 610:813dcc80987e 378 /* DeInit the low level hardware */
mbed_official 610:813dcc80987e 379 HAL_DAC_MspDeInit(hdac);
mbed_official 610:813dcc80987e 380
mbed_official 610:813dcc80987e 381 /* Set DAC error code to none */
mbed_official 610:813dcc80987e 382 hdac->ErrorCode = HAL_DAC_ERROR_NONE;
mbed_official 610:813dcc80987e 383
mbed_official 610:813dcc80987e 384 /* Change DAC state */
mbed_official 610:813dcc80987e 385 hdac->State = HAL_DAC_STATE_RESET;
mbed_official 610:813dcc80987e 386
mbed_official 610:813dcc80987e 387 /* Release Lock */
mbed_official 610:813dcc80987e 388 __HAL_UNLOCK(hdac);
mbed_official 610:813dcc80987e 389
mbed_official 610:813dcc80987e 390 /* Return function status */
mbed_official 610:813dcc80987e 391 return HAL_OK;
mbed_official 610:813dcc80987e 392 }
mbed_official 610:813dcc80987e 393
mbed_official 610:813dcc80987e 394 /**
mbed_official 610:813dcc80987e 395 * @brief Initialize the DAC MSP.
mbed_official 610:813dcc80987e 396 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 397 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 398 * @retval None
mbed_official 610:813dcc80987e 399 */
mbed_official 610:813dcc80987e 400 __weak void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 401 {
mbed_official 610:813dcc80987e 402 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 403 the HAL_DAC_MspInit could be implemented in the user file
mbed_official 610:813dcc80987e 404 */
mbed_official 610:813dcc80987e 405 }
mbed_official 610:813dcc80987e 406
mbed_official 610:813dcc80987e 407 /**
mbed_official 610:813dcc80987e 408 * @brief DeInitialize the DAC MSP.
mbed_official 610:813dcc80987e 409 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 410 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 411 * @retval None
mbed_official 610:813dcc80987e 412 */
mbed_official 610:813dcc80987e 413 __weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 414 {
mbed_official 610:813dcc80987e 415 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 416 the HAL_DAC_MspDeInit could be implemented in the user file
mbed_official 610:813dcc80987e 417 */
mbed_official 610:813dcc80987e 418 }
mbed_official 610:813dcc80987e 419
mbed_official 610:813dcc80987e 420 /**
mbed_official 610:813dcc80987e 421 * @}
mbed_official 610:813dcc80987e 422 */
mbed_official 610:813dcc80987e 423
mbed_official 610:813dcc80987e 424 /** @defgroup DAC_Exported_Functions_Group2 IO operation functions
mbed_official 610:813dcc80987e 425 * @brief IO operation functions
mbed_official 610:813dcc80987e 426 *
mbed_official 610:813dcc80987e 427 @verbatim
mbed_official 610:813dcc80987e 428 ==============================================================================
mbed_official 610:813dcc80987e 429 ##### IO operation functions #####
mbed_official 610:813dcc80987e 430 ==============================================================================
mbed_official 610:813dcc80987e 431 [..] This section provides functions allowing to:
mbed_official 610:813dcc80987e 432 (+) Start conversion.
mbed_official 610:813dcc80987e 433 (+) Stop conversion.
mbed_official 610:813dcc80987e 434 (+) Start conversion and enable DMA transfer.
mbed_official 610:813dcc80987e 435 (+) Stop conversion and disable DMA transfer.
mbed_official 610:813dcc80987e 436 (+) Get result of conversion.
mbed_official 610:813dcc80987e 437
mbed_official 610:813dcc80987e 438 @endverbatim
mbed_official 610:813dcc80987e 439 * @{
mbed_official 610:813dcc80987e 440 */
mbed_official 610:813dcc80987e 441
mbed_official 610:813dcc80987e 442 /**
mbed_official 610:813dcc80987e 443 * @brief Enables DAC and starts conversion of channel.
mbed_official 610:813dcc80987e 444 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 445 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 446 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 447 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 448 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 449 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 450 * @retval HAL status
mbed_official 610:813dcc80987e 451 */
mbed_official 610:813dcc80987e 452 HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 610:813dcc80987e 453 {
mbed_official 610:813dcc80987e 454 /* Check the parameters */
mbed_official 610:813dcc80987e 455 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 456
mbed_official 610:813dcc80987e 457 /* Process locked */
mbed_official 610:813dcc80987e 458 __HAL_LOCK(hdac);
mbed_official 610:813dcc80987e 459
mbed_official 610:813dcc80987e 460 /* Change DAC state */
mbed_official 610:813dcc80987e 461 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 610:813dcc80987e 462
mbed_official 610:813dcc80987e 463 /* Enable the Peripheral */
mbed_official 610:813dcc80987e 464 __HAL_DAC_ENABLE(hdac, Channel);
mbed_official 610:813dcc80987e 465
mbed_official 610:813dcc80987e 466 if(Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 467 {
mbed_official 610:813dcc80987e 468 /* Check if software trigger enabled */
mbed_official 610:813dcc80987e 469 if((hdac->Instance->CR & (DAC_CR_TEN1 | DAC_CR_TSEL1)) == (DAC_CR_TEN1 | DAC_CR_TSEL1))
mbed_official 610:813dcc80987e 470 {
mbed_official 610:813dcc80987e 471 /* Enable the selected DAC software conversion */
mbed_official 610:813dcc80987e 472 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG1);
mbed_official 610:813dcc80987e 473 }
mbed_official 610:813dcc80987e 474 }
mbed_official 610:813dcc80987e 475 else
mbed_official 610:813dcc80987e 476 {
mbed_official 610:813dcc80987e 477 /* Check if software trigger enabled */
mbed_official 610:813dcc80987e 478 if((hdac->Instance->CR & (DAC_CR_TEN2 | DAC_CR_TSEL2)) == (DAC_CR_TEN2 | DAC_CR_TSEL2))
mbed_official 610:813dcc80987e 479 {
mbed_official 610:813dcc80987e 480 /* Enable the selected DAC software conversion*/
mbed_official 610:813dcc80987e 481 SET_BIT(hdac->Instance->SWTRIGR, DAC_SWTRIGR_SWTRIG2);
mbed_official 610:813dcc80987e 482 }
mbed_official 610:813dcc80987e 483 }
mbed_official 610:813dcc80987e 484
mbed_official 610:813dcc80987e 485 /* Change DAC state */
mbed_official 610:813dcc80987e 486 hdac->State = HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 487
mbed_official 610:813dcc80987e 488 /* Process unlocked */
mbed_official 610:813dcc80987e 489 __HAL_UNLOCK(hdac);
mbed_official 610:813dcc80987e 490
mbed_official 610:813dcc80987e 491 /* Return function status */
mbed_official 610:813dcc80987e 492 return HAL_OK;
mbed_official 610:813dcc80987e 493 }
mbed_official 610:813dcc80987e 494
mbed_official 610:813dcc80987e 495 /**
mbed_official 610:813dcc80987e 496 * @brief Disables DAC and stop conversion of channel.
mbed_official 610:813dcc80987e 497 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 498 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 499 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 500 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 501 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 502 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 503 * @retval HAL status
mbed_official 610:813dcc80987e 504 */
mbed_official 610:813dcc80987e 505 HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 610:813dcc80987e 506 {
mbed_official 610:813dcc80987e 507 /* Check the parameters */
mbed_official 610:813dcc80987e 508 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 509
mbed_official 610:813dcc80987e 510 /* Disable the Peripheral */
mbed_official 610:813dcc80987e 511 __HAL_DAC_DISABLE(hdac, Channel);
mbed_official 610:813dcc80987e 512
mbed_official 610:813dcc80987e 513 /* Change DAC state */
mbed_official 610:813dcc80987e 514 hdac->State = HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 515
mbed_official 610:813dcc80987e 516 /* Return function status */
mbed_official 610:813dcc80987e 517 return HAL_OK;
mbed_official 610:813dcc80987e 518 }
mbed_official 610:813dcc80987e 519
mbed_official 610:813dcc80987e 520 /**
mbed_official 610:813dcc80987e 521 * @brief Enables DAC and starts conversion of channel.
mbed_official 610:813dcc80987e 522 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 523 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 524 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 525 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 526 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 527 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 528 * @param pData: The destination peripheral Buffer address.
mbed_official 610:813dcc80987e 529 * @param Length: The length of data to be transferred from memory to DAC peripheral
mbed_official 610:813dcc80987e 530 * @param Alignment: Specifies the data alignment for DAC channel.
mbed_official 610:813dcc80987e 531 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 532 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
mbed_official 610:813dcc80987e 533 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
mbed_official 610:813dcc80987e 534 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
mbed_official 610:813dcc80987e 535 * @retval HAL status
mbed_official 610:813dcc80987e 536 */
mbed_official 610:813dcc80987e 537 HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment)
mbed_official 610:813dcc80987e 538 {
mbed_official 610:813dcc80987e 539 uint32_t tmpreg = 0;
mbed_official 610:813dcc80987e 540
mbed_official 610:813dcc80987e 541 /* Check the parameters */
mbed_official 610:813dcc80987e 542 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 543 assert_param(IS_DAC_ALIGN(Alignment));
mbed_official 610:813dcc80987e 544
mbed_official 610:813dcc80987e 545 /* Process locked */
mbed_official 610:813dcc80987e 546 __HAL_LOCK(hdac);
mbed_official 610:813dcc80987e 547
mbed_official 610:813dcc80987e 548 /* Change DAC state */
mbed_official 610:813dcc80987e 549 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 610:813dcc80987e 550
mbed_official 610:813dcc80987e 551 if(Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 552 {
mbed_official 610:813dcc80987e 553 /* Set the DMA transfer complete callback for channel1 */
mbed_official 610:813dcc80987e 554 hdac->DMA_Handle1->XferCpltCallback = DAC_DMAConvCpltCh1;
mbed_official 610:813dcc80987e 555
mbed_official 610:813dcc80987e 556 /* Set the DMA half transfer complete callback for channel1 */
mbed_official 610:813dcc80987e 557 hdac->DMA_Handle1->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh1;
mbed_official 610:813dcc80987e 558
mbed_official 610:813dcc80987e 559 /* Set the DMA error callback for channel1 */
mbed_official 610:813dcc80987e 560 hdac->DMA_Handle1->XferErrorCallback = DAC_DMAErrorCh1;
mbed_official 610:813dcc80987e 561
mbed_official 610:813dcc80987e 562 /* Enable the selected DAC channel1 DMA request */
mbed_official 610:813dcc80987e 563 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
mbed_official 610:813dcc80987e 564
mbed_official 610:813dcc80987e 565 /* Case of use of channel 1 */
mbed_official 610:813dcc80987e 566 switch(Alignment)
mbed_official 610:813dcc80987e 567 {
mbed_official 610:813dcc80987e 568 case DAC_ALIGN_12B_R:
mbed_official 610:813dcc80987e 569 /* Get DHR12R1 address */
mbed_official 610:813dcc80987e 570 tmpreg = (uint32_t)&hdac->Instance->DHR12R1;
mbed_official 610:813dcc80987e 571 break;
mbed_official 610:813dcc80987e 572 case DAC_ALIGN_12B_L:
mbed_official 610:813dcc80987e 573 /* Get DHR12L1 address */
mbed_official 610:813dcc80987e 574 tmpreg = (uint32_t)&hdac->Instance->DHR12L1;
mbed_official 610:813dcc80987e 575 break;
mbed_official 610:813dcc80987e 576 case DAC_ALIGN_8B_R:
mbed_official 610:813dcc80987e 577 /* Get DHR8R1 address */
mbed_official 610:813dcc80987e 578 tmpreg = (uint32_t)&hdac->Instance->DHR8R1;
mbed_official 610:813dcc80987e 579 break;
mbed_official 610:813dcc80987e 580 default:
mbed_official 610:813dcc80987e 581 break;
mbed_official 610:813dcc80987e 582 }
mbed_official 610:813dcc80987e 583 }
mbed_official 610:813dcc80987e 584 else
mbed_official 610:813dcc80987e 585 {
mbed_official 610:813dcc80987e 586 /* Set the DMA transfer complete callback for channel2 */
mbed_official 610:813dcc80987e 587 hdac->DMA_Handle2->XferCpltCallback = DAC_DMAConvCpltCh2;
mbed_official 610:813dcc80987e 588
mbed_official 610:813dcc80987e 589 /* Set the DMA half transfer complete callback for channel2 */
mbed_official 610:813dcc80987e 590 hdac->DMA_Handle2->XferHalfCpltCallback = DAC_DMAHalfConvCpltCh2;
mbed_official 610:813dcc80987e 591
mbed_official 610:813dcc80987e 592 /* Set the DMA error callback for channel2 */
mbed_official 610:813dcc80987e 593 hdac->DMA_Handle2->XferErrorCallback = DAC_DMAErrorCh2;
mbed_official 610:813dcc80987e 594
mbed_official 610:813dcc80987e 595 /* Enable the selected DAC channel2 DMA request */
mbed_official 610:813dcc80987e 596 SET_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
mbed_official 610:813dcc80987e 597
mbed_official 610:813dcc80987e 598 /* Case of use of channel 2 */
mbed_official 610:813dcc80987e 599 switch(Alignment)
mbed_official 610:813dcc80987e 600 {
mbed_official 610:813dcc80987e 601 case DAC_ALIGN_12B_R:
mbed_official 610:813dcc80987e 602 /* Get DHR12R2 address */
mbed_official 610:813dcc80987e 603 tmpreg = (uint32_t)&hdac->Instance->DHR12R2;
mbed_official 610:813dcc80987e 604 break;
mbed_official 610:813dcc80987e 605 case DAC_ALIGN_12B_L:
mbed_official 610:813dcc80987e 606 /* Get DHR12L2 address */
mbed_official 610:813dcc80987e 607 tmpreg = (uint32_t)&hdac->Instance->DHR12L2;
mbed_official 610:813dcc80987e 608 break;
mbed_official 610:813dcc80987e 609 case DAC_ALIGN_8B_R:
mbed_official 610:813dcc80987e 610 /* Get DHR8R2 address */
mbed_official 610:813dcc80987e 611 tmpreg = (uint32_t)&hdac->Instance->DHR8R2;
mbed_official 610:813dcc80987e 612 break;
mbed_official 610:813dcc80987e 613 default:
mbed_official 610:813dcc80987e 614 break;
mbed_official 610:813dcc80987e 615 }
mbed_official 610:813dcc80987e 616 }
mbed_official 610:813dcc80987e 617
mbed_official 610:813dcc80987e 618 /* Enable the DMA channel */
mbed_official 610:813dcc80987e 619 if(Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 620 {
mbed_official 610:813dcc80987e 621 /* Enable the DAC DMA underrun interrupt */
mbed_official 610:813dcc80987e 622 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR1);
mbed_official 610:813dcc80987e 623
mbed_official 610:813dcc80987e 624 /* Enable the DMA channel */
mbed_official 610:813dcc80987e 625 HAL_DMA_Start_IT(hdac->DMA_Handle1, (uint32_t)pData, tmpreg, Length);
mbed_official 610:813dcc80987e 626 }
mbed_official 610:813dcc80987e 627 else
mbed_official 610:813dcc80987e 628 {
mbed_official 610:813dcc80987e 629 /* Enable the DAC DMA underrun interrupt */
mbed_official 610:813dcc80987e 630 __HAL_DAC_ENABLE_IT(hdac, DAC_IT_DMAUDR2);
mbed_official 610:813dcc80987e 631
mbed_official 610:813dcc80987e 632 /* Enable the DMA channel */
mbed_official 610:813dcc80987e 633 HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length);
mbed_official 610:813dcc80987e 634 }
mbed_official 610:813dcc80987e 635
mbed_official 610:813dcc80987e 636 /* Process Unlocked */
mbed_official 610:813dcc80987e 637 __HAL_UNLOCK(hdac);
mbed_official 610:813dcc80987e 638
mbed_official 610:813dcc80987e 639 /* Enable the Peripheral */
mbed_official 610:813dcc80987e 640 __HAL_DAC_ENABLE(hdac, Channel);
mbed_official 610:813dcc80987e 641
mbed_official 610:813dcc80987e 642 /* Return function status */
mbed_official 610:813dcc80987e 643 return HAL_OK;
mbed_official 610:813dcc80987e 644 }
mbed_official 610:813dcc80987e 645
mbed_official 610:813dcc80987e 646 /**
mbed_official 610:813dcc80987e 647 * @brief Disables DAC and stop conversion of channel.
mbed_official 610:813dcc80987e 648 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 649 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 650 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 651 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 652 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 653 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 654 * @retval HAL status
mbed_official 610:813dcc80987e 655 */
mbed_official 610:813dcc80987e 656 HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 610:813dcc80987e 657 {
mbed_official 610:813dcc80987e 658 HAL_StatusTypeDef status = HAL_OK;
mbed_official 610:813dcc80987e 659
mbed_official 610:813dcc80987e 660 /* Check the parameters */
mbed_official 610:813dcc80987e 661 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 662
mbed_official 610:813dcc80987e 663 /* Disable the selected DAC channel DMA request */
mbed_official 610:813dcc80987e 664 hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << Channel);
mbed_official 610:813dcc80987e 665
mbed_official 610:813dcc80987e 666 /* Disable the Peripheral */
mbed_official 610:813dcc80987e 667 __HAL_DAC_DISABLE(hdac, Channel);
mbed_official 610:813dcc80987e 668
mbed_official 610:813dcc80987e 669 /* Disable the DMA channel */
mbed_official 610:813dcc80987e 670 /* Channel1 is used */
mbed_official 610:813dcc80987e 671 if (Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 672 {
mbed_official 610:813dcc80987e 673 /* Disable the DMA channel */
mbed_official 610:813dcc80987e 674 status = HAL_DMA_Abort(hdac->DMA_Handle1);
mbed_official 610:813dcc80987e 675
mbed_official 610:813dcc80987e 676 /* Disable the DAC DMA underrun interrupt */
mbed_official 610:813dcc80987e 677 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR1);
mbed_official 610:813dcc80987e 678 }
mbed_official 610:813dcc80987e 679 else /* Channel2 is used for */
mbed_official 610:813dcc80987e 680 {
mbed_official 610:813dcc80987e 681 /* Disable the DMA channel */
mbed_official 610:813dcc80987e 682 status = HAL_DMA_Abort(hdac->DMA_Handle2);
mbed_official 610:813dcc80987e 683
mbed_official 610:813dcc80987e 684 /* Disable the DAC DMA underrun interrupt */
mbed_official 610:813dcc80987e 685 __HAL_DAC_DISABLE_IT(hdac, DAC_IT_DMAUDR2);
mbed_official 610:813dcc80987e 686 }
mbed_official 610:813dcc80987e 687
mbed_official 610:813dcc80987e 688 /* Check if DMA Channel effectively disabled */
mbed_official 610:813dcc80987e 689 if (status != HAL_OK)
mbed_official 610:813dcc80987e 690 {
mbed_official 610:813dcc80987e 691 /* Update DAC state machine to error */
mbed_official 610:813dcc80987e 692 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 610:813dcc80987e 693 }
mbed_official 610:813dcc80987e 694 else
mbed_official 610:813dcc80987e 695 {
mbed_official 610:813dcc80987e 696 /* Change DAC state */
mbed_official 610:813dcc80987e 697 hdac->State = HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 698 }
mbed_official 610:813dcc80987e 699
mbed_official 610:813dcc80987e 700 /* Return function status */
mbed_official 610:813dcc80987e 701 return status;
mbed_official 610:813dcc80987e 702 }
mbed_official 610:813dcc80987e 703
mbed_official 610:813dcc80987e 704 /* DAC channel 2 is available on top of DAC channel 1 */
mbed_official 610:813dcc80987e 705
mbed_official 610:813dcc80987e 706 /**
mbed_official 610:813dcc80987e 707 * @brief Handles DAC interrupt request
mbed_official 610:813dcc80987e 708 * This function uses the interruption of DMA
mbed_official 610:813dcc80987e 709 * underrun.
mbed_official 610:813dcc80987e 710 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 711 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 712 * @retval None
mbed_official 610:813dcc80987e 713 */
mbed_official 610:813dcc80987e 714 void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 715 {
mbed_official 610:813dcc80987e 716 if(__HAL_DAC_GET_IT_SOURCE(hdac, DAC_IT_DMAUDR1))
mbed_official 610:813dcc80987e 717 {
mbed_official 610:813dcc80987e 718 /* Check underrun flag of DAC channel 1 */
mbed_official 610:813dcc80987e 719 if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR1))
mbed_official 610:813dcc80987e 720 {
mbed_official 610:813dcc80987e 721 /* Change DAC state to error state */
mbed_official 610:813dcc80987e 722 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 610:813dcc80987e 723
mbed_official 610:813dcc80987e 724 /* Set DAC error code to chanel1 DMA underrun error */
mbed_official 610:813dcc80987e 725 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH1);
mbed_official 610:813dcc80987e 726
mbed_official 610:813dcc80987e 727 /* Clear the underrun flag */
mbed_official 610:813dcc80987e 728 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR1);
mbed_official 610:813dcc80987e 729
mbed_official 610:813dcc80987e 730 /* Disable the selected DAC channel1 DMA request */
mbed_official 610:813dcc80987e 731 CLEAR_BIT(hdac->Instance->CR, DAC_CR_DMAEN1);
mbed_official 610:813dcc80987e 732
mbed_official 610:813dcc80987e 733 /* Error callback */
mbed_official 610:813dcc80987e 734 HAL_DAC_DMAUnderrunCallbackCh1(hdac);
mbed_official 610:813dcc80987e 735 }
mbed_official 610:813dcc80987e 736 }
mbed_official 610:813dcc80987e 737 if(__HAL_DAC_GET_IT_SOURCE(hdac, DAC_IT_DMAUDR2))
mbed_official 610:813dcc80987e 738 {
mbed_official 610:813dcc80987e 739 /* Check underrun flag of DAC channel 1 */
mbed_official 610:813dcc80987e 740 if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR2))
mbed_official 610:813dcc80987e 741 {
mbed_official 610:813dcc80987e 742 /* Change DAC state to error state */
mbed_official 610:813dcc80987e 743 hdac->State = HAL_DAC_STATE_ERROR;
mbed_official 610:813dcc80987e 744
mbed_official 610:813dcc80987e 745 /* Set DAC error code to channel2 DMA underrun error */
mbed_official 610:813dcc80987e 746 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_DMAUNDERRUNCH2);
mbed_official 610:813dcc80987e 747
mbed_official 610:813dcc80987e 748 /* Clear the underrun flag */
mbed_official 610:813dcc80987e 749 __HAL_DAC_CLEAR_FLAG(hdac,DAC_FLAG_DMAUDR2);
mbed_official 610:813dcc80987e 750
mbed_official 610:813dcc80987e 751 /* Disable the selected DAC channel1 DMA request */
mbed_official 610:813dcc80987e 752 CLEAR_BIT(hdac->Instance->CR, DAC_CR_DMAEN2);
mbed_official 610:813dcc80987e 753
mbed_official 610:813dcc80987e 754 /* Error callback */
mbed_official 610:813dcc80987e 755 HAL_DACEx_DMAUnderrunCallbackCh2(hdac);
mbed_official 610:813dcc80987e 756 }
mbed_official 610:813dcc80987e 757 }
mbed_official 610:813dcc80987e 758 }
mbed_official 610:813dcc80987e 759
mbed_official 610:813dcc80987e 760 /**
mbed_official 610:813dcc80987e 761 * @brief Set the specified data holding register value for DAC channel.
mbed_official 610:813dcc80987e 762 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 763 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 764 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 765 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 766 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 767 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 768 * @param Alignment: Specifies the data alignment.
mbed_official 610:813dcc80987e 769 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 770 * @arg DAC_ALIGN_8B_R: 8bit right data alignment selected
mbed_official 610:813dcc80987e 771 * @arg DAC_ALIGN_12B_L: 12bit left data alignment selected
mbed_official 610:813dcc80987e 772 * @arg DAC_ALIGN_12B_R: 12bit right data alignment selected
mbed_official 610:813dcc80987e 773 * @param Data: Data to be loaded in the selected data holding register.
mbed_official 610:813dcc80987e 774 * @retval HAL status
mbed_official 610:813dcc80987e 775 */
mbed_official 610:813dcc80987e 776 HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)
mbed_official 610:813dcc80987e 777 {
mbed_official 610:813dcc80987e 778 __IO uint32_t tmp = 0;
mbed_official 610:813dcc80987e 779
mbed_official 610:813dcc80987e 780 /* Check the parameters */
mbed_official 610:813dcc80987e 781 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 782 assert_param(IS_DAC_ALIGN(Alignment));
mbed_official 610:813dcc80987e 783 assert_param(IS_DAC_DATA(Data));
mbed_official 610:813dcc80987e 784
mbed_official 610:813dcc80987e 785 tmp = (uint32_t)hdac->Instance;
mbed_official 610:813dcc80987e 786 if(Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 787 {
mbed_official 610:813dcc80987e 788 tmp += DAC_DHR12R1_ALIGNMENT(Alignment);
mbed_official 610:813dcc80987e 789 }
mbed_official 610:813dcc80987e 790 else
mbed_official 610:813dcc80987e 791 {
mbed_official 610:813dcc80987e 792 tmp += DAC_DHR12R2_ALIGNMENT(Alignment);
mbed_official 610:813dcc80987e 793 }
mbed_official 610:813dcc80987e 794
mbed_official 610:813dcc80987e 795 /* Set the DAC channel selected data holding register */
mbed_official 610:813dcc80987e 796 *(__IO uint32_t *) tmp = Data;
mbed_official 610:813dcc80987e 797
mbed_official 610:813dcc80987e 798 /* Return function status */
mbed_official 610:813dcc80987e 799 return HAL_OK;
mbed_official 610:813dcc80987e 800 }
mbed_official 610:813dcc80987e 801
mbed_official 610:813dcc80987e 802 /**
mbed_official 610:813dcc80987e 803 * @brief Conversion complete callback in non-blocking mode for Channel1
mbed_official 610:813dcc80987e 804 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 805 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 806 * @retval None
mbed_official 610:813dcc80987e 807 */
mbed_official 610:813dcc80987e 808 __weak void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 809 {
mbed_official 610:813dcc80987e 810 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 811 the HAL_DAC_ConvCpltCallbackCh1 could be implemented in the user file
mbed_official 610:813dcc80987e 812 */
mbed_official 610:813dcc80987e 813 }
mbed_official 610:813dcc80987e 814
mbed_official 610:813dcc80987e 815 /**
mbed_official 610:813dcc80987e 816 * @brief Conversion half DMA transfer callback in non-blocking mode for Channel1
mbed_official 610:813dcc80987e 817 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 818 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 819 * @retval None
mbed_official 610:813dcc80987e 820 */
mbed_official 610:813dcc80987e 821 __weak void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 822 {
mbed_official 610:813dcc80987e 823 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 824 the HAL_DAC_ConvHalfCpltCallbackCh1 could be implemented in the user file
mbed_official 610:813dcc80987e 825 */
mbed_official 610:813dcc80987e 826 }
mbed_official 610:813dcc80987e 827
mbed_official 610:813dcc80987e 828 /**
mbed_official 610:813dcc80987e 829 * @brief Error DAC callback for Channel1.
mbed_official 610:813dcc80987e 830 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 831 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 832 * @retval None
mbed_official 610:813dcc80987e 833 */
mbed_official 610:813dcc80987e 834 __weak void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac)
mbed_official 610:813dcc80987e 835 {
mbed_official 610:813dcc80987e 836 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 837 the HAL_DAC_ErrorCallbackCh1 could be implemented in the user file
mbed_official 610:813dcc80987e 838 */
mbed_official 610:813dcc80987e 839 }
mbed_official 610:813dcc80987e 840
mbed_official 610:813dcc80987e 841 /**
mbed_official 610:813dcc80987e 842 * @brief DMA underrun DAC callback for channel1.
mbed_official 610:813dcc80987e 843 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 844 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 845 * @retval None
mbed_official 610:813dcc80987e 846 */
mbed_official 610:813dcc80987e 847 __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac)
mbed_official 610:813dcc80987e 848 {
mbed_official 610:813dcc80987e 849 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 610:813dcc80987e 850 the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file
mbed_official 610:813dcc80987e 851 */
mbed_official 610:813dcc80987e 852 }
mbed_official 610:813dcc80987e 853
mbed_official 610:813dcc80987e 854 /**
mbed_official 610:813dcc80987e 855 * @}
mbed_official 610:813dcc80987e 856 */
mbed_official 610:813dcc80987e 857
mbed_official 610:813dcc80987e 858 /** @defgroup DAC_Exported_Functions_Group3 Peripheral Control functions
mbed_official 610:813dcc80987e 859 * @brief Peripheral Control functions
mbed_official 610:813dcc80987e 860 *
mbed_official 610:813dcc80987e 861 @verbatim
mbed_official 610:813dcc80987e 862 ==============================================================================
mbed_official 610:813dcc80987e 863 ##### Peripheral Control functions #####
mbed_official 610:813dcc80987e 864 ==============================================================================
mbed_official 610:813dcc80987e 865 [..] This section provides functions allowing to:
mbed_official 610:813dcc80987e 866 (+) Configure channels.
mbed_official 610:813dcc80987e 867 (+) Set the specified data holding register value for DAC channel.
mbed_official 610:813dcc80987e 868
mbed_official 610:813dcc80987e 869 @endverbatim
mbed_official 610:813dcc80987e 870 * @{
mbed_official 610:813dcc80987e 871 */
mbed_official 610:813dcc80987e 872
mbed_official 610:813dcc80987e 873 /**
mbed_official 610:813dcc80987e 874 * @brief Returns the last data output value of the selected DAC channel.
mbed_official 610:813dcc80987e 875 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 876 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 877 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 878 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 879 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 880 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 881 * @retval The selected DAC channel data output value.
mbed_official 610:813dcc80987e 882 */
mbed_official 610:813dcc80987e 883 uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel)
mbed_official 610:813dcc80987e 884 {
mbed_official 610:813dcc80987e 885 /* Check the parameters */
mbed_official 610:813dcc80987e 886 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 887
mbed_official 610:813dcc80987e 888 /* Returns the DAC channel data output register value */
mbed_official 610:813dcc80987e 889 if(Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 890 {
mbed_official 610:813dcc80987e 891 return hdac->Instance->DOR1;
mbed_official 610:813dcc80987e 892 }
mbed_official 610:813dcc80987e 893 else
mbed_official 610:813dcc80987e 894 {
mbed_official 610:813dcc80987e 895 return hdac->Instance->DOR2;
mbed_official 610:813dcc80987e 896 }
mbed_official 610:813dcc80987e 897 }
mbed_official 610:813dcc80987e 898
mbed_official 610:813dcc80987e 899 /**
mbed_official 610:813dcc80987e 900 * @brief Configures the selected DAC channel.
mbed_official 610:813dcc80987e 901 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 902 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 903 * @param sConfig: DAC configuration structure.
mbed_official 610:813dcc80987e 904 * @param Channel: The selected DAC channel.
mbed_official 610:813dcc80987e 905 * This parameter can be one of the following values:
mbed_official 610:813dcc80987e 906 * @arg DAC_CHANNEL_1: DAC Channel1 selected
mbed_official 610:813dcc80987e 907 * @arg DAC_CHANNEL_2: DAC Channel2 selected
mbed_official 610:813dcc80987e 908 * @retval HAL status
mbed_official 610:813dcc80987e 909 */
mbed_official 610:813dcc80987e 910 HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel)
mbed_official 610:813dcc80987e 911 {
mbed_official 610:813dcc80987e 912 uint32_t tmpreg1 = 0, tmpreg2 = 0;
mbed_official 610:813dcc80987e 913 uint32_t tickstart = 0;
mbed_official 610:813dcc80987e 914
mbed_official 610:813dcc80987e 915 /* Check the DAC parameters */
mbed_official 610:813dcc80987e 916 assert_param(IS_DAC_TRIGGER(sConfig->DAC_Trigger));
mbed_official 610:813dcc80987e 917 assert_param(IS_DAC_OUTPUT_BUFFER_STATE(sConfig->DAC_OutputBuffer));
mbed_official 610:813dcc80987e 918 assert_param(IS_DAC_CHIP_CONNECTION(sConfig->DAC_ConnectOnChipPeripheral));
mbed_official 610:813dcc80987e 919 assert_param(IS_DAC_TRIMMING(sConfig->DAC_UserTrimming));
mbed_official 610:813dcc80987e 920 if ((sConfig->DAC_UserTrimming) == DAC_TRIMMING_USER)
mbed_official 610:813dcc80987e 921 {
mbed_official 610:813dcc80987e 922 assert_param(IS_DAC_TRIMMINGVALUE(sConfig->DAC_TrimmingValue));
mbed_official 610:813dcc80987e 923 }
mbed_official 610:813dcc80987e 924 assert_param(IS_DAC_SAMPLEANDHOLD(sConfig->DAC_SampleAndHold));
mbed_official 610:813dcc80987e 925 if ((sConfig->DAC_SampleAndHold) == DAC_SAMPLEANDHOLD_ENABLE)
mbed_official 610:813dcc80987e 926 {
mbed_official 610:813dcc80987e 927 assert_param(IS_DAC_SAMPLETIME(sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime));
mbed_official 610:813dcc80987e 928 assert_param(IS_DAC_HOLDTIME(sConfig->DAC_SampleAndHoldConfig.DAC_HoldTime));
mbed_official 610:813dcc80987e 929 assert_param(IS_DAC_REFRESHTIME(sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime));
mbed_official 610:813dcc80987e 930 }
mbed_official 610:813dcc80987e 931 assert_param(IS_DAC_CHANNEL(Channel));
mbed_official 610:813dcc80987e 932
mbed_official 610:813dcc80987e 933 /* Process locked */
mbed_official 610:813dcc80987e 934 __HAL_LOCK(hdac);
mbed_official 610:813dcc80987e 935
mbed_official 610:813dcc80987e 936 /* Change DAC state */
mbed_official 610:813dcc80987e 937 hdac->State = HAL_DAC_STATE_BUSY;
mbed_official 610:813dcc80987e 938
mbed_official 610:813dcc80987e 939 if(sConfig->DAC_SampleAndHold == DAC_SAMPLEANDHOLD_ENABLE)
mbed_official 610:813dcc80987e 940 /* Sample on old configuration */
mbed_official 610:813dcc80987e 941 {
mbed_official 610:813dcc80987e 942 /* SampleTime */
mbed_official 610:813dcc80987e 943 if (Channel == DAC_CHANNEL_1)
mbed_official 610:813dcc80987e 944 {
mbed_official 610:813dcc80987e 945 /* Get timeout */
mbed_official 610:813dcc80987e 946 tickstart = HAL_GetTick();
mbed_official 610:813dcc80987e 947
mbed_official 610:813dcc80987e 948 /* SHSR1 can be written when BWST1 equals RESET */
mbed_official 610:813dcc80987e 949 while (((hdac->Instance->SR) & DAC_SR_BWST1)!= RESET)
mbed_official 610:813dcc80987e 950 {
mbed_official 610:813dcc80987e 951 /* Check for the Timeout */
mbed_official 610:813dcc80987e 952 if((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
mbed_official 610:813dcc80987e 953 {
mbed_official 610:813dcc80987e 954 /* Update error code */
mbed_official 610:813dcc80987e 955 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
mbed_official 610:813dcc80987e 956
mbed_official 610:813dcc80987e 957 /* Change the DMA state */
mbed_official 610:813dcc80987e 958 hdac->State = HAL_DAC_STATE_TIMEOUT;
mbed_official 610:813dcc80987e 959
mbed_official 610:813dcc80987e 960 return HAL_TIMEOUT;
mbed_official 610:813dcc80987e 961 }
mbed_official 610:813dcc80987e 962 }
mbed_official 610:813dcc80987e 963 HAL_Delay(1);
mbed_official 610:813dcc80987e 964 hdac->Instance->SHSR1 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
mbed_official 610:813dcc80987e 965 }
mbed_official 610:813dcc80987e 966 else /* Channel 2 */
mbed_official 610:813dcc80987e 967 {
mbed_official 610:813dcc80987e 968 /* SHSR2 can be written when BWST2 equals RESET */
mbed_official 610:813dcc80987e 969
mbed_official 610:813dcc80987e 970 while (((hdac->Instance->SR) & DAC_SR_BWST2)!= RESET)
mbed_official 610:813dcc80987e 971 {
mbed_official 610:813dcc80987e 972 /* Check for the Timeout */
mbed_official 610:813dcc80987e 973 if((HAL_GetTick() - tickstart) > TIMEOUT_DAC_CALIBCONFIG)
mbed_official 610:813dcc80987e 974 {
mbed_official 610:813dcc80987e 975 /* Update error code */
mbed_official 610:813dcc80987e 976 SET_BIT(hdac->ErrorCode, HAL_DAC_ERROR_TIMEOUT);
mbed_official 610:813dcc80987e 977
mbed_official 610:813dcc80987e 978 /* Change the DMA state */
mbed_official 610:813dcc80987e 979 hdac->State = HAL_DAC_STATE_TIMEOUT;
mbed_official 610:813dcc80987e 980
mbed_official 610:813dcc80987e 981 return HAL_TIMEOUT;
mbed_official 610:813dcc80987e 982 }
mbed_official 610:813dcc80987e 983 }
mbed_official 610:813dcc80987e 984 HAL_Delay(1);
mbed_official 610:813dcc80987e 985 hdac->Instance->SHSR2 = sConfig->DAC_SampleAndHoldConfig.DAC_SampleTime;
mbed_official 610:813dcc80987e 986 }
mbed_official 610:813dcc80987e 987 /* HoldTime */
mbed_official 610:813dcc80987e 988 hdac->Instance->SHHR = (sConfig->DAC_SampleAndHoldConfig.DAC_HoldTime)<<Channel;
mbed_official 610:813dcc80987e 989 /* RefreshTime */
mbed_official 610:813dcc80987e 990 hdac->Instance->SHRR = (sConfig->DAC_SampleAndHoldConfig.DAC_RefreshTime)<<Channel;
mbed_official 610:813dcc80987e 991 }
mbed_official 610:813dcc80987e 992
mbed_official 610:813dcc80987e 993 if(sConfig->DAC_UserTrimming == DAC_TRIMMING_USER)
mbed_official 610:813dcc80987e 994 /* USER TRIMMING */
mbed_official 610:813dcc80987e 995 {
mbed_official 610:813dcc80987e 996 /* Get the DAC CCR value */
mbed_official 610:813dcc80987e 997 tmpreg1 = hdac->Instance->CCR;
mbed_official 610:813dcc80987e 998 /* Clear trimming value */
mbed_official 610:813dcc80987e 999 tmpreg1 &= ~(((uint32_t)(DAC_CCR_OTRIM1)) << Channel);
mbed_official 610:813dcc80987e 1000 /* Configure for the selected trimming offset */
mbed_official 610:813dcc80987e 1001 tmpreg2 = sConfig->DAC_TrimmingValue;
mbed_official 610:813dcc80987e 1002 /* Calculate CCR register value depending on DAC_Channel */
mbed_official 610:813dcc80987e 1003 tmpreg1 |= tmpreg2 << Channel;
mbed_official 610:813dcc80987e 1004 /* Write to DAC CCR */
mbed_official 610:813dcc80987e 1005 hdac->Instance->CCR = tmpreg1;
mbed_official 610:813dcc80987e 1006 }
mbed_official 610:813dcc80987e 1007 /* else factory trimming is used (factory setting are available at reset)*/
mbed_official 610:813dcc80987e 1008 /* SW Nothing has nothing to do */
mbed_official 610:813dcc80987e 1009
mbed_official 610:813dcc80987e 1010 /* Get the DAC MCR value */
mbed_official 610:813dcc80987e 1011 tmpreg1 = hdac->Instance->MCR;
mbed_official 610:813dcc80987e 1012 /* Clear DAC_MCR_MODE2_0, DAC_MCR_MODE2_1 and DAC_MCR_MODE2_2 bits */
mbed_official 610:813dcc80987e 1013 tmpreg1 &= ~(((uint32_t)(DAC_MCR_MODE1)) << Channel);
mbed_official 610:813dcc80987e 1014 /* Configure for the selected DAC channel: mode, buffer output & on chip peripheral connect */
mbed_official 610:813dcc80987e 1015 tmpreg2 = (sConfig->DAC_SampleAndHold | sConfig->DAC_OutputBuffer | sConfig->DAC_ConnectOnChipPeripheral);
mbed_official 610:813dcc80987e 1016 /* Calculate MCR register value depending on DAC_Channel */
mbed_official 610:813dcc80987e 1017 tmpreg1 |= tmpreg2 << Channel;
mbed_official 610:813dcc80987e 1018 /* Write to DAC MCR */
mbed_official 610:813dcc80987e 1019 hdac->Instance->MCR = tmpreg1;
mbed_official 610:813dcc80987e 1020
mbed_official 610:813dcc80987e 1021 /* DAC in normal operating mode hence clear DAC_CR_CENx bit */
mbed_official 610:813dcc80987e 1022 CLEAR_BIT (hdac->Instance->CR, DAC_CR_CEN1 << Channel);
mbed_official 610:813dcc80987e 1023
mbed_official 610:813dcc80987e 1024 /* Get the DAC CR value */
mbed_official 610:813dcc80987e 1025 tmpreg1 = hdac->Instance->CR;
mbed_official 610:813dcc80987e 1026 /* Clear TENx, TSELx, WAVEx and MAMPx bits */
mbed_official 610:813dcc80987e 1027 tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1)) << Channel);
mbed_official 610:813dcc80987e 1028 /* Configure for the selected DAC channel: trigger */
mbed_official 610:813dcc80987e 1029 /* Set TSELx and TENx bits according to DAC_Trigger value */
mbed_official 610:813dcc80987e 1030 tmpreg2 = (sConfig->DAC_Trigger);
mbed_official 610:813dcc80987e 1031 /* Calculate CR register value depending on DAC_Channel */
mbed_official 610:813dcc80987e 1032 tmpreg1 |= tmpreg2 << Channel;
mbed_official 610:813dcc80987e 1033 /* Write to DAC CR */
mbed_official 610:813dcc80987e 1034 hdac->Instance->CR = tmpreg1;
mbed_official 610:813dcc80987e 1035
mbed_official 610:813dcc80987e 1036 /* Disable wave generation */
mbed_official 610:813dcc80987e 1037 hdac->Instance->CR &= ~(DAC_CR_WAVE1 << Channel);
mbed_official 610:813dcc80987e 1038
mbed_official 610:813dcc80987e 1039 /* Change DAC state */
mbed_official 610:813dcc80987e 1040 hdac->State = HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 1041
mbed_official 610:813dcc80987e 1042 /* Process unlocked */
mbed_official 610:813dcc80987e 1043 __HAL_UNLOCK(hdac);
mbed_official 610:813dcc80987e 1044
mbed_official 610:813dcc80987e 1045 /* Return function status */
mbed_official 610:813dcc80987e 1046 return HAL_OK;
mbed_official 610:813dcc80987e 1047 }
mbed_official 610:813dcc80987e 1048
mbed_official 610:813dcc80987e 1049 /**
mbed_official 610:813dcc80987e 1050 * @}
mbed_official 610:813dcc80987e 1051 */
mbed_official 610:813dcc80987e 1052
mbed_official 610:813dcc80987e 1053 /** @defgroup DAC_Exported_Functions_Group4 Peripheral State and Errors functions
mbed_official 610:813dcc80987e 1054 * @brief Peripheral State and Errors functions
mbed_official 610:813dcc80987e 1055 *
mbed_official 610:813dcc80987e 1056 @verbatim
mbed_official 610:813dcc80987e 1057 ==============================================================================
mbed_official 610:813dcc80987e 1058 ##### Peripheral State and Errors functions #####
mbed_official 610:813dcc80987e 1059 ==============================================================================
mbed_official 610:813dcc80987e 1060 [..]
mbed_official 610:813dcc80987e 1061 This subsection provides functions allowing to
mbed_official 610:813dcc80987e 1062 (+) Check the DAC state.
mbed_official 610:813dcc80987e 1063 (+) Check the DAC Errors.
mbed_official 610:813dcc80987e 1064
mbed_official 610:813dcc80987e 1065 @endverbatim
mbed_official 610:813dcc80987e 1066 * @{
mbed_official 610:813dcc80987e 1067 */
mbed_official 610:813dcc80987e 1068
mbed_official 610:813dcc80987e 1069 /**
mbed_official 610:813dcc80987e 1070 * @brief return the DAC handle state
mbed_official 610:813dcc80987e 1071 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 1072 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 1073 * @retval HAL state
mbed_official 610:813dcc80987e 1074 */
mbed_official 610:813dcc80987e 1075 HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac)
mbed_official 610:813dcc80987e 1076 {
mbed_official 610:813dcc80987e 1077 /* Return DAC handle state */
mbed_official 610:813dcc80987e 1078 return hdac->State;
mbed_official 610:813dcc80987e 1079 }
mbed_official 610:813dcc80987e 1080
mbed_official 610:813dcc80987e 1081
mbed_official 610:813dcc80987e 1082 /**
mbed_official 610:813dcc80987e 1083 * @brief Return the DAC error code
mbed_official 610:813dcc80987e 1084 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 1085 * the configuration information for the specified DAC.
mbed_official 610:813dcc80987e 1086 * @retval DAC Error Code
mbed_official 610:813dcc80987e 1087 */
mbed_official 610:813dcc80987e 1088 uint32_t HAL_DAC_GetError(DAC_HandleTypeDef *hdac)
mbed_official 610:813dcc80987e 1089 {
mbed_official 610:813dcc80987e 1090 return hdac->ErrorCode;
mbed_official 610:813dcc80987e 1091 }
mbed_official 610:813dcc80987e 1092
mbed_official 610:813dcc80987e 1093 /**
mbed_official 610:813dcc80987e 1094 * @}
mbed_official 610:813dcc80987e 1095 */
mbed_official 610:813dcc80987e 1096
mbed_official 610:813dcc80987e 1097 /**
mbed_official 610:813dcc80987e 1098 * @}
mbed_official 610:813dcc80987e 1099 */
mbed_official 610:813dcc80987e 1100
mbed_official 610:813dcc80987e 1101 /** @addtogroup DAC_Private_Functions
mbed_official 610:813dcc80987e 1102 * @{
mbed_official 610:813dcc80987e 1103 */
mbed_official 610:813dcc80987e 1104
mbed_official 610:813dcc80987e 1105 /**
mbed_official 610:813dcc80987e 1106 * @brief DMA conversion complete callback.
mbed_official 610:813dcc80987e 1107 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 1108 * the configuration information for the specified DMA module.
mbed_official 610:813dcc80987e 1109 * @retval None
mbed_official 610:813dcc80987e 1110 */
mbed_official 610:813dcc80987e 1111 static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma)
mbed_official 610:813dcc80987e 1112 {
mbed_official 610:813dcc80987e 1113 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 610:813dcc80987e 1114
mbed_official 610:813dcc80987e 1115 HAL_DAC_ConvCpltCallbackCh1(hdac);
mbed_official 610:813dcc80987e 1116
mbed_official 610:813dcc80987e 1117 hdac->State= HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 1118 }
mbed_official 610:813dcc80987e 1119
mbed_official 610:813dcc80987e 1120 /**
mbed_official 610:813dcc80987e 1121 * @brief DMA half transfer complete callback.
mbed_official 610:813dcc80987e 1122 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 1123 * the configuration information for the specified DMA module.
mbed_official 610:813dcc80987e 1124 * @retval None
mbed_official 610:813dcc80987e 1125 */
mbed_official 610:813dcc80987e 1126 static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma)
mbed_official 610:813dcc80987e 1127 {
mbed_official 610:813dcc80987e 1128 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 610:813dcc80987e 1129 /* Conversion complete callback */
mbed_official 610:813dcc80987e 1130 HAL_DAC_ConvHalfCpltCallbackCh1(hdac);
mbed_official 610:813dcc80987e 1131 }
mbed_official 610:813dcc80987e 1132
mbed_official 610:813dcc80987e 1133 /**
mbed_official 610:813dcc80987e 1134 * @brief DMA error callback
mbed_official 610:813dcc80987e 1135 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 610:813dcc80987e 1136 * the configuration information for the specified DMA module.
mbed_official 610:813dcc80987e 1137 * @retval None
mbed_official 610:813dcc80987e 1138 */
mbed_official 610:813dcc80987e 1139 static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma)
mbed_official 610:813dcc80987e 1140 {
mbed_official 610:813dcc80987e 1141 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 610:813dcc80987e 1142
mbed_official 610:813dcc80987e 1143 /* Set DAC error code to DMA error */
mbed_official 610:813dcc80987e 1144 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
mbed_official 610:813dcc80987e 1145
mbed_official 610:813dcc80987e 1146 HAL_DAC_ErrorCallbackCh1(hdac);
mbed_official 610:813dcc80987e 1147
mbed_official 610:813dcc80987e 1148 hdac->State= HAL_DAC_STATE_READY;
mbed_official 610:813dcc80987e 1149 }
mbed_official 610:813dcc80987e 1150
mbed_official 610:813dcc80987e 1151 /**
mbed_official 610:813dcc80987e 1152 * @}
mbed_official 610:813dcc80987e 1153 */
mbed_official 610:813dcc80987e 1154
mbed_official 610:813dcc80987e 1155 #endif /* HAL_DAC_MODULE_ENABLED */
mbed_official 610:813dcc80987e 1156
mbed_official 610:813dcc80987e 1157 /**
mbed_official 610:813dcc80987e 1158 * @}
mbed_official 610:813dcc80987e 1159 */
mbed_official 610:813dcc80987e 1160
mbed_official 610:813dcc80987e 1161 /**
mbed_official 610:813dcc80987e 1162 * @}
mbed_official 610:813dcc80987e 1163 */
mbed_official 610:813dcc80987e 1164
mbed_official 610:813dcc80987e 1165 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/