mbed library sources

Dependents:   Marvino mbot

Fork of mbed-src by mbed official

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