Eric Lewiston / STM32L4xx_HAL_Driver

Dependents:   BSP OneHopeOnePrayer FINAL_AUDIO_RECORD AudioDemo

Fork of STM32L4xx_HAL_Driver by Senior Design: Sound Monitor

Committer:
EricLew
Date:
Mon Nov 02 19:37:23 2015 +0000
Revision:
0:80ee8f3b695e
Errors are with definitions of LCD and QSPI functions. I believe all .h and .c files are  uploaded, but there may need to be certain functions called.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EricLew 0:80ee8f3b695e 1 /**
EricLew 0:80ee8f3b695e 2 ******************************************************************************
EricLew 0:80ee8f3b695e 3 * @file stm32l4xx_hal_dac_ex.c
EricLew 0:80ee8f3b695e 4 * @author MCD Application Team
EricLew 0:80ee8f3b695e 5 * @version V1.1.0
EricLew 0:80ee8f3b695e 6 * @date 16-September-2015
EricLew 0:80ee8f3b695e 7 * @brief DAC HAL module driver.
EricLew 0:80ee8f3b695e 8 * This file provides firmware functions to manage the extended
EricLew 0:80ee8f3b695e 9 * functionalities of the DAC peripheral.
EricLew 0:80ee8f3b695e 10 *
EricLew 0:80ee8f3b695e 11 *
EricLew 0:80ee8f3b695e 12 @verbatim
EricLew 0:80ee8f3b695e 13 ==============================================================================
EricLew 0:80ee8f3b695e 14 ##### How to use this driver #####
EricLew 0:80ee8f3b695e 15 ==============================================================================
EricLew 0:80ee8f3b695e 16 [..]
EricLew 0:80ee8f3b695e 17 (+) When Dual mode is enabled (i.e. DAC Channel1 and Channel2 are used simultaneously) :
EricLew 0:80ee8f3b695e 18 Use HAL_DACEx_DualGetValue() to get digital data to be converted and use
EricLew 0:80ee8f3b695e 19 HAL_DACEx_DualSetValue() to set digital value to converted simultaneously in Channel 1 and Channel 2.
EricLew 0:80ee8f3b695e 20 (+) Use HAL_DACEx_TriangleWaveGenerate() to generate Triangle signal.
EricLew 0:80ee8f3b695e 21 (+) Use HAL_DACEx_NoiseWaveGenerate() to generate Noise signal.
EricLew 0:80ee8f3b695e 22
EricLew 0:80ee8f3b695e 23 (+) HAL_DACEx_SelfCalibrate to calibrate one DAC channel.
EricLew 0:80ee8f3b695e 24 (+) HAL_DACEx_SetUserTrimming to set user trimming value.
EricLew 0:80ee8f3b695e 25 (+) HAL_DACEx_GetTrimOffset to retrieve trimming value (factory setting
EricLew 0:80ee8f3b695e 26 after reset, user setting if HAL_DACEx_SetUserTrimming have been used
EricLew 0:80ee8f3b695e 27 at least one time after reset).
EricLew 0:80ee8f3b695e 28
EricLew 0:80ee8f3b695e 29 @endverbatim
EricLew 0:80ee8f3b695e 30 ******************************************************************************
EricLew 0:80ee8f3b695e 31 * @attention
EricLew 0:80ee8f3b695e 32 *
EricLew 0:80ee8f3b695e 33 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
EricLew 0:80ee8f3b695e 34 *
EricLew 0:80ee8f3b695e 35 * Redistribution and use in source and binary forms, with or without modification,
EricLew 0:80ee8f3b695e 36 * are permitted provided that the following conditions are met:
EricLew 0:80ee8f3b695e 37 * 1. Redistributions of source code must retain the above copyright notice,
EricLew 0:80ee8f3b695e 38 * this list of conditions and the following disclaimer.
EricLew 0:80ee8f3b695e 39 * 2. Redistributions in binary form must reproduce the above copyright notice,
EricLew 0:80ee8f3b695e 40 * this list of conditions and the following disclaimer in the documentation
EricLew 0:80ee8f3b695e 41 * and/or other materials provided with the distribution.
EricLew 0:80ee8f3b695e 42 * 3. Neither the name of STMicroelectronics nor the names of its contributors
EricLew 0:80ee8f3b695e 43 * may be used to endorse or promote products derived from this software
EricLew 0:80ee8f3b695e 44 * without specific prior written permission.
EricLew 0:80ee8f3b695e 45 *
EricLew 0:80ee8f3b695e 46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
EricLew 0:80ee8f3b695e 47 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
EricLew 0:80ee8f3b695e 48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
EricLew 0:80ee8f3b695e 49 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
EricLew 0:80ee8f3b695e 50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
EricLew 0:80ee8f3b695e 51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
EricLew 0:80ee8f3b695e 52 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
EricLew 0:80ee8f3b695e 53 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
EricLew 0:80ee8f3b695e 54 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
EricLew 0:80ee8f3b695e 55 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
EricLew 0:80ee8f3b695e 56 *
EricLew 0:80ee8f3b695e 57 ******************************************************************************
EricLew 0:80ee8f3b695e 58 */
EricLew 0:80ee8f3b695e 59
EricLew 0:80ee8f3b695e 60
EricLew 0:80ee8f3b695e 61 /* Includes ------------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 62 #include "stm32l4xx_hal.h"
EricLew 0:80ee8f3b695e 63
EricLew 0:80ee8f3b695e 64 /** @addtogroup STM32L4xx_HAL_Driver
EricLew 0:80ee8f3b695e 65 * @{
EricLew 0:80ee8f3b695e 66 */
EricLew 0:80ee8f3b695e 67
EricLew 0:80ee8f3b695e 68 /** @defgroup DACEx DACEx
EricLew 0:80ee8f3b695e 69 * @brief DAC Extended HAL module driver
EricLew 0:80ee8f3b695e 70 * @{
EricLew 0:80ee8f3b695e 71 */
EricLew 0:80ee8f3b695e 72
EricLew 0:80ee8f3b695e 73 #ifdef HAL_DAC_MODULE_ENABLED
EricLew 0:80ee8f3b695e 74
EricLew 0:80ee8f3b695e 75 /* Private typedef -----------------------------------------------------------*/
EricLew 0:80ee8f3b695e 76 /* Private define ------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 77 /* Private macro -------------------------------------------------------------*/
EricLew 0:80ee8f3b695e 78 /* Private variables ---------------------------------------------------------*/
EricLew 0:80ee8f3b695e 79 /* Private function prototypes -----------------------------------------------*/
EricLew 0:80ee8f3b695e 80 /* Exported functions --------------------------------------------------------*/
EricLew 0:80ee8f3b695e 81
EricLew 0:80ee8f3b695e 82 /** @defgroup DACEx_Exported_Functions DACEx Exported Functions
EricLew 0:80ee8f3b695e 83 * @{
EricLew 0:80ee8f3b695e 84 */
EricLew 0:80ee8f3b695e 85
EricLew 0:80ee8f3b695e 86 /** @defgroup DACEx_Exported_Functions_Group2 IO operation functions
EricLew 0:80ee8f3b695e 87 * @brief Extended IO operation functions
EricLew 0:80ee8f3b695e 88 *
EricLew 0:80ee8f3b695e 89 @verbatim
EricLew 0:80ee8f3b695e 90 ==============================================================================
EricLew 0:80ee8f3b695e 91 ##### Extended features functions #####
EricLew 0:80ee8f3b695e 92 ==============================================================================
EricLew 0:80ee8f3b695e 93 [..] This section provides functions allowing to:
EricLew 0:80ee8f3b695e 94 (+) Start conversion.
EricLew 0:80ee8f3b695e 95 (+) Stop conversion.
EricLew 0:80ee8f3b695e 96 (+) Start conversion and enable DMA transfer.
EricLew 0:80ee8f3b695e 97 (+) Stop conversion and disable DMA transfer.
EricLew 0:80ee8f3b695e 98 (+) Get result of conversion.
EricLew 0:80ee8f3b695e 99 (+) Get result of dual mode conversion.
EricLew 0:80ee8f3b695e 100
EricLew 0:80ee8f3b695e 101 @endverbatim
EricLew 0:80ee8f3b695e 102 * @{
EricLew 0:80ee8f3b695e 103 */
EricLew 0:80ee8f3b695e 104
EricLew 0:80ee8f3b695e 105 /**
EricLew 0:80ee8f3b695e 106 * @brief Enable or disable the selected DAC channel wave generation.
EricLew 0:80ee8f3b695e 107 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 108 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 109 * @param Channel: The selected DAC channel.
EricLew 0:80ee8f3b695e 110 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 111 * DAC_CHANNEL_1 / DAC_CHANNEL_2
EricLew 0:80ee8f3b695e 112 * @param Amplitude: Select max triangle amplitude.
EricLew 0:80ee8f3b695e 113 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 114 * @arg DAC_TRIANGLEAMPLITUDE_1: Select max triangle amplitude of 1
EricLew 0:80ee8f3b695e 115 * @arg DAC_TRIANGLEAMPLITUDE_3: Select max triangle amplitude of 3
EricLew 0:80ee8f3b695e 116 * @arg DAC_TRIANGLEAMPLITUDE_7: Select max triangle amplitude of 7
EricLew 0:80ee8f3b695e 117 * @arg DAC_TRIANGLEAMPLITUDE_15: Select max triangle amplitude of 15
EricLew 0:80ee8f3b695e 118 * @arg DAC_TRIANGLEAMPLITUDE_31: Select max triangle amplitude of 31
EricLew 0:80ee8f3b695e 119 * @arg DAC_TRIANGLEAMPLITUDE_63: Select max triangle amplitude of 63
EricLew 0:80ee8f3b695e 120 * @arg DAC_TRIANGLEAMPLITUDE_127: Select max triangle amplitude of 127
EricLew 0:80ee8f3b695e 121 * @arg DAC_TRIANGLEAMPLITUDE_255: Select max triangle amplitude of 255
EricLew 0:80ee8f3b695e 122 * @arg DAC_TRIANGLEAMPLITUDE_511: Select max triangle amplitude of 511
EricLew 0:80ee8f3b695e 123 * @arg DAC_TRIANGLEAMPLITUDE_1023: Select max triangle amplitude of 1023
EricLew 0:80ee8f3b695e 124 * @arg DAC_TRIANGLEAMPLITUDE_2047: Select max triangle amplitude of 2047
EricLew 0:80ee8f3b695e 125 * @arg DAC_TRIANGLEAMPLITUDE_4095: Select max triangle amplitude of 4095
EricLew 0:80ee8f3b695e 126 * @retval HAL status
EricLew 0:80ee8f3b695e 127 */
EricLew 0:80ee8f3b695e 128 HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude)
EricLew 0:80ee8f3b695e 129 {
EricLew 0:80ee8f3b695e 130 /* Check the parameters */
EricLew 0:80ee8f3b695e 131 assert_param(IS_DAC_CHANNEL(Channel));
EricLew 0:80ee8f3b695e 132 assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(Amplitude));
EricLew 0:80ee8f3b695e 133
EricLew 0:80ee8f3b695e 134 /* Process locked */
EricLew 0:80ee8f3b695e 135 __HAL_LOCK(hdac);
EricLew 0:80ee8f3b695e 136
EricLew 0:80ee8f3b695e 137 /* Change DAC state */
EricLew 0:80ee8f3b695e 138 hdac->State = HAL_DAC_STATE_BUSY;
EricLew 0:80ee8f3b695e 139
EricLew 0:80ee8f3b695e 140 /* Enable the triangle wave generation for the selected DAC channel */
EricLew 0:80ee8f3b695e 141 MODIFY_REG(hdac->Instance->CR, ((DAC_CR_WAVE1)|(DAC_CR_MAMP1))<<Channel, (DAC_CR_WAVE1_1 | Amplitude) << Channel);
EricLew 0:80ee8f3b695e 142
EricLew 0:80ee8f3b695e 143 /* Change DAC state */
EricLew 0:80ee8f3b695e 144 hdac->State = HAL_DAC_STATE_READY;
EricLew 0:80ee8f3b695e 145
EricLew 0:80ee8f3b695e 146 /* Process unlocked */
EricLew 0:80ee8f3b695e 147 __HAL_UNLOCK(hdac);
EricLew 0:80ee8f3b695e 148
EricLew 0:80ee8f3b695e 149 /* Return function status */
EricLew 0:80ee8f3b695e 150 return HAL_OK;
EricLew 0:80ee8f3b695e 151 }
EricLew 0:80ee8f3b695e 152
EricLew 0:80ee8f3b695e 153 /**
EricLew 0:80ee8f3b695e 154 * @brief Enable or disable the selected DAC channel wave generation.
EricLew 0:80ee8f3b695e 155 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 156 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 157 * @param Channel: The selected DAC channel.
EricLew 0:80ee8f3b695e 158 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 159 * DAC_CHANNEL_1 / DAC_CHANNEL_2
EricLew 0:80ee8f3b695e 160 * @param Amplitude: Unmask DAC channel LFSR for noise wave generation.
EricLew 0:80ee8f3b695e 161 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 162 * @arg DAC_LFSRUNMASK_BIT0: Unmask DAC channel LFSR bit0 for noise wave generation
EricLew 0:80ee8f3b695e 163 * @arg DAC_LFSRUNMASK_BITS1_0: Unmask DAC channel LFSR bit[1:0] for noise wave generation
EricLew 0:80ee8f3b695e 164 * @arg DAC_LFSRUNMASK_BITS2_0: Unmask DAC channel LFSR bit[2:0] for noise wave generation
EricLew 0:80ee8f3b695e 165 * @arg DAC_LFSRUNMASK_BITS3_0: Unmask DAC channel LFSR bit[3:0] for noise wave generation
EricLew 0:80ee8f3b695e 166 * @arg DAC_LFSRUNMASK_BITS4_0: Unmask DAC channel LFSR bit[4:0] for noise wave generation
EricLew 0:80ee8f3b695e 167 * @arg DAC_LFSRUNMASK_BITS5_0: Unmask DAC channel LFSR bit[5:0] for noise wave generation
EricLew 0:80ee8f3b695e 168 * @arg DAC_LFSRUNMASK_BITS6_0: Unmask DAC channel LFSR bit[6:0] for noise wave generation
EricLew 0:80ee8f3b695e 169 * @arg DAC_LFSRUNMASK_BITS7_0: Unmask DAC channel LFSR bit[7:0] for noise wave generation
EricLew 0:80ee8f3b695e 170 * @arg DAC_LFSRUNMASK_BITS8_0: Unmask DAC channel LFSR bit[8:0] for noise wave generation
EricLew 0:80ee8f3b695e 171 * @arg DAC_LFSRUNMASK_BITS9_0: Unmask DAC channel LFSR bit[9:0] for noise wave generation
EricLew 0:80ee8f3b695e 172 * @arg DAC_LFSRUNMASK_BITS10_0: Unmask DAC channel LFSR bit[10:0] for noise wave generation
EricLew 0:80ee8f3b695e 173 * @arg DAC_LFSRUNMASK_BITS11_0: Unmask DAC channel LFSR bit[11:0] for noise wave generation
EricLew 0:80ee8f3b695e 174 * @retval HAL status
EricLew 0:80ee8f3b695e 175 */
EricLew 0:80ee8f3b695e 176 HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude)
EricLew 0:80ee8f3b695e 177 {
EricLew 0:80ee8f3b695e 178 /* Check the parameters */
EricLew 0:80ee8f3b695e 179 assert_param(IS_DAC_CHANNEL(Channel));
EricLew 0:80ee8f3b695e 180 assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(Amplitude));
EricLew 0:80ee8f3b695e 181
EricLew 0:80ee8f3b695e 182 /* Process locked */
EricLew 0:80ee8f3b695e 183 __HAL_LOCK(hdac);
EricLew 0:80ee8f3b695e 184
EricLew 0:80ee8f3b695e 185 /* Change DAC state */
EricLew 0:80ee8f3b695e 186 hdac->State = HAL_DAC_STATE_BUSY;
EricLew 0:80ee8f3b695e 187
EricLew 0:80ee8f3b695e 188 /* Enable the noise wave generation for the selected DAC channel */
EricLew 0:80ee8f3b695e 189 MODIFY_REG(hdac->Instance->CR, ((DAC_CR_WAVE1)|(DAC_CR_MAMP1))<<Channel, (DAC_CR_WAVE1_0 | Amplitude) << Channel);
EricLew 0:80ee8f3b695e 190
EricLew 0:80ee8f3b695e 191 /* Change DAC state */
EricLew 0:80ee8f3b695e 192 hdac->State = HAL_DAC_STATE_READY;
EricLew 0:80ee8f3b695e 193
EricLew 0:80ee8f3b695e 194 /* Process unlocked */
EricLew 0:80ee8f3b695e 195 __HAL_UNLOCK(hdac);
EricLew 0:80ee8f3b695e 196
EricLew 0:80ee8f3b695e 197 /* Return function status */
EricLew 0:80ee8f3b695e 198 return HAL_OK;
EricLew 0:80ee8f3b695e 199 }
EricLew 0:80ee8f3b695e 200
EricLew 0:80ee8f3b695e 201
EricLew 0:80ee8f3b695e 202
EricLew 0:80ee8f3b695e 203 /**
EricLew 0:80ee8f3b695e 204 * @brief Set the specified data holding register value for dual DAC channel.
EricLew 0:80ee8f3b695e 205 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 206 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 207 * @param Alignment: Specifies the data alignment for dual channel DAC.
EricLew 0:80ee8f3b695e 208 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 209 * DAC_ALIGN_8B_R: 8bit right data alignment selected
EricLew 0:80ee8f3b695e 210 * DAC_ALIGN_12B_L: 12bit left data alignment selected
EricLew 0:80ee8f3b695e 211 * DAC_ALIGN_12B_R: 12bit right data alignment selected
EricLew 0:80ee8f3b695e 212 * @param Data1: Data for DAC Channel2 to be loaded in the selected data holding register.
EricLew 0:80ee8f3b695e 213 * @param Data2: Data for DAC Channel1 to be loaded in the selected data holding register.
EricLew 0:80ee8f3b695e 214 * @note In dual mode, a unique register access is required to write in both
EricLew 0:80ee8f3b695e 215 * DAC channels at the same time.
EricLew 0:80ee8f3b695e 216 * @retval HAL status
EricLew 0:80ee8f3b695e 217 */
EricLew 0:80ee8f3b695e 218 HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Alignment, uint32_t Data1, uint32_t Data2)
EricLew 0:80ee8f3b695e 219 {
EricLew 0:80ee8f3b695e 220 uint32_t data = 0, tmp = 0;
EricLew 0:80ee8f3b695e 221
EricLew 0:80ee8f3b695e 222 /* Check the parameters */
EricLew 0:80ee8f3b695e 223 assert_param(IS_DAC_ALIGN(Alignment));
EricLew 0:80ee8f3b695e 224 assert_param(IS_DAC_DATA(Data1));
EricLew 0:80ee8f3b695e 225 assert_param(IS_DAC_DATA(Data2));
EricLew 0:80ee8f3b695e 226
EricLew 0:80ee8f3b695e 227 /* Calculate and set dual DAC data holding register value */
EricLew 0:80ee8f3b695e 228 if (Alignment == DAC_ALIGN_8B_R)
EricLew 0:80ee8f3b695e 229 {
EricLew 0:80ee8f3b695e 230 data = ((uint32_t)Data2 << 8) | Data1;
EricLew 0:80ee8f3b695e 231 }
EricLew 0:80ee8f3b695e 232 else
EricLew 0:80ee8f3b695e 233 {
EricLew 0:80ee8f3b695e 234 data = ((uint32_t)Data2 << 16) | Data1;
EricLew 0:80ee8f3b695e 235 }
EricLew 0:80ee8f3b695e 236
EricLew 0:80ee8f3b695e 237 tmp = (uint32_t)hdac->Instance;
EricLew 0:80ee8f3b695e 238 tmp += DAC_DHR12RD_ALIGNMENT(Alignment);
EricLew 0:80ee8f3b695e 239
EricLew 0:80ee8f3b695e 240 /* Set the dual DAC selected data holding register */
EricLew 0:80ee8f3b695e 241 *(__IO uint32_t *)tmp = data;
EricLew 0:80ee8f3b695e 242
EricLew 0:80ee8f3b695e 243 /* Return function status */
EricLew 0:80ee8f3b695e 244 return HAL_OK;
EricLew 0:80ee8f3b695e 245 }
EricLew 0:80ee8f3b695e 246
EricLew 0:80ee8f3b695e 247 /**
EricLew 0:80ee8f3b695e 248 * @brief Conversion complete callback in non-blocking mode for Channel2.
EricLew 0:80ee8f3b695e 249 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 250 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 251 * @retval None
EricLew 0:80ee8f3b695e 252 */
EricLew 0:80ee8f3b695e 253 __weak void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac)
EricLew 0:80ee8f3b695e 254 {
EricLew 0:80ee8f3b695e 255 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 256 the HAL_DACEx_ConvCpltCallbackCh2 could be implemented in the user file
EricLew 0:80ee8f3b695e 257 */
EricLew 0:80ee8f3b695e 258 }
EricLew 0:80ee8f3b695e 259
EricLew 0:80ee8f3b695e 260 /**
EricLew 0:80ee8f3b695e 261 * @brief Conversion half DMA transfer callback in non-blocking mode for Channel2.
EricLew 0:80ee8f3b695e 262 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 263 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 264 * @retval None
EricLew 0:80ee8f3b695e 265 */
EricLew 0:80ee8f3b695e 266 __weak void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac)
EricLew 0:80ee8f3b695e 267 {
EricLew 0:80ee8f3b695e 268 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 269 the HAL_DACEx_ConvHalfCpltCallbackCh2 could be implemented in the user file
EricLew 0:80ee8f3b695e 270 */
EricLew 0:80ee8f3b695e 271 }
EricLew 0:80ee8f3b695e 272
EricLew 0:80ee8f3b695e 273 /**
EricLew 0:80ee8f3b695e 274 * @brief Error DAC callback for Channel2.
EricLew 0:80ee8f3b695e 275 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 276 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 277 * @retval None
EricLew 0:80ee8f3b695e 278 */
EricLew 0:80ee8f3b695e 279 __weak void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef *hdac)
EricLew 0:80ee8f3b695e 280 {
EricLew 0:80ee8f3b695e 281 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 282 the HAL_DACEx_ErrorCallbackCh2 could be implemented in the user file
EricLew 0:80ee8f3b695e 283 */
EricLew 0:80ee8f3b695e 284 }
EricLew 0:80ee8f3b695e 285
EricLew 0:80ee8f3b695e 286 /**
EricLew 0:80ee8f3b695e 287 * @brief DMA underrun DAC callback for Channel2.
EricLew 0:80ee8f3b695e 288 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 289 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 290 * @retval None
EricLew 0:80ee8f3b695e 291 */
EricLew 0:80ee8f3b695e 292 __weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac)
EricLew 0:80ee8f3b695e 293 {
EricLew 0:80ee8f3b695e 294 /* NOTE : This function should not be modified, when the callback is needed,
EricLew 0:80ee8f3b695e 295 the HAL_DACEx_DMAUnderrunCallbackCh2 could be implemented in the user file
EricLew 0:80ee8f3b695e 296 */
EricLew 0:80ee8f3b695e 297 }
EricLew 0:80ee8f3b695e 298
EricLew 0:80ee8f3b695e 299 /**
EricLew 0:80ee8f3b695e 300 * @brief Run the self calibration of one DAC channel.
EricLew 0:80ee8f3b695e 301 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 302 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 303 * @param sConfig: DAC channel configuration structure.
EricLew 0:80ee8f3b695e 304 * @param Channel: The selected DAC channel.
EricLew 0:80ee8f3b695e 305 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 306 * @arg DAC_CHANNEL_1: DAC Channel1 selected
EricLew 0:80ee8f3b695e 307 * @arg DAC_CHANNEL_2: DAC Channel2 selected
EricLew 0:80ee8f3b695e 308 * @retval Updates DAC_TrimmingValue. , DAC_UserTrimming set to DAC_UserTrimming
EricLew 0:80ee8f3b695e 309 * @retval HAL status
EricLew 0:80ee8f3b695e 310 * @note Calibration runs about 7 ms.
EricLew 0:80ee8f3b695e 311 */
EricLew 0:80ee8f3b695e 312
EricLew 0:80ee8f3b695e 313 HAL_StatusTypeDef HAL_DACEx_SelfCalibrate (DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel)
EricLew 0:80ee8f3b695e 314 {
EricLew 0:80ee8f3b695e 315 HAL_StatusTypeDef status = HAL_OK;
EricLew 0:80ee8f3b695e 316
EricLew 0:80ee8f3b695e 317 __IO uint32_t tmp = 0;
EricLew 0:80ee8f3b695e 318 uint32_t trimmingvalue = 0;
EricLew 0:80ee8f3b695e 319 uint32_t delta;
EricLew 0:80ee8f3b695e 320
EricLew 0:80ee8f3b695e 321 /* store/restore channel configuration structure purpose */
EricLew 0:80ee8f3b695e 322 uint32_t oldmodeconfiguration = 0;
EricLew 0:80ee8f3b695e 323
EricLew 0:80ee8f3b695e 324 /* Check the parameters */
EricLew 0:80ee8f3b695e 325 assert_param(IS_DAC_CHANNEL(Channel));
EricLew 0:80ee8f3b695e 326
EricLew 0:80ee8f3b695e 327 /* Check the DAC handle allocation */
EricLew 0:80ee8f3b695e 328 /* Check if DAC running */
EricLew 0:80ee8f3b695e 329 if((hdac == NULL) || (hdac->State == HAL_DAC_STATE_BUSY))
EricLew 0:80ee8f3b695e 330 {
EricLew 0:80ee8f3b695e 331 status = HAL_ERROR;
EricLew 0:80ee8f3b695e 332 }
EricLew 0:80ee8f3b695e 333
EricLew 0:80ee8f3b695e 334 /* Process locked */
EricLew 0:80ee8f3b695e 335 __HAL_LOCK(hdac);
EricLew 0:80ee8f3b695e 336
EricLew 0:80ee8f3b695e 337 /* Store configuration */
EricLew 0:80ee8f3b695e 338 oldmodeconfiguration = (hdac->Instance->MCR & (DAC_MCR_MODE1 << Channel));
EricLew 0:80ee8f3b695e 339
EricLew 0:80ee8f3b695e 340 /* Disable the selected DAC channel */
EricLew 0:80ee8f3b695e 341 CLEAR_BIT ((hdac->Instance->CR), (DAC_CR_EN1 << Channel));
EricLew 0:80ee8f3b695e 342
EricLew 0:80ee8f3b695e 343 /* Set mode in MCR for calibration */
EricLew 0:80ee8f3b695e 344 MODIFY_REG(hdac->Instance->MCR, (DAC_MCR_MODE1 << Channel), 0);
EricLew 0:80ee8f3b695e 345
EricLew 0:80ee8f3b695e 346 /* Set DAC Channel1 DHR register to the middle value */
EricLew 0:80ee8f3b695e 347 /* HAL_DAC_SetValue(hdac, Channel, DAC_ALIGN_12B_R, 0x0800); */
EricLew 0:80ee8f3b695e 348 tmp = (uint32_t)hdac->Instance;
EricLew 0:80ee8f3b695e 349 if(Channel == DAC_CHANNEL_1)
EricLew 0:80ee8f3b695e 350 {
EricLew 0:80ee8f3b695e 351 tmp += DAC_DHR12R1_ALIGNMENT(DAC_ALIGN_12B_R);
EricLew 0:80ee8f3b695e 352 }
EricLew 0:80ee8f3b695e 353 else
EricLew 0:80ee8f3b695e 354 {
EricLew 0:80ee8f3b695e 355 tmp += DAC_DHR12R2_ALIGNMENT(DAC_ALIGN_12B_R);
EricLew 0:80ee8f3b695e 356 }
EricLew 0:80ee8f3b695e 357 *(__IO uint32_t *) tmp = 0x0800;
EricLew 0:80ee8f3b695e 358
EricLew 0:80ee8f3b695e 359 /* Enable the selected DAC channel calibration */
EricLew 0:80ee8f3b695e 360 /* i.e. set DAC_CR_CENx bit */
EricLew 0:80ee8f3b695e 361 SET_BIT ((hdac->Instance->CR), (DAC_CR_CEN1 << Channel));
EricLew 0:80ee8f3b695e 362
EricLew 0:80ee8f3b695e 363 /* Init trimming counter */
EricLew 0:80ee8f3b695e 364 /* Medium value */
EricLew 0:80ee8f3b695e 365 trimmingvalue = 16;
EricLew 0:80ee8f3b695e 366 delta = 8;
EricLew 0:80ee8f3b695e 367 while (delta != 0)
EricLew 0:80ee8f3b695e 368 {
EricLew 0:80ee8f3b695e 369 /* Set candidate trimming */
EricLew 0:80ee8f3b695e 370 MODIFY_REG(hdac->Instance->CCR, (DAC_CCR_OTRIM1<<Channel), (trimmingvalue<<Channel));
EricLew 0:80ee8f3b695e 371
EricLew 0:80ee8f3b695e 372 /* tOFFTRIMmax delay x ms as per datasheet (electrical characteristics */
EricLew 0:80ee8f3b695e 373 /* i.e. minimum time needed between two calibration steps */
EricLew 0:80ee8f3b695e 374 HAL_Delay(1);
EricLew 0:80ee8f3b695e 375
EricLew 0:80ee8f3b695e 376 if ((hdac->Instance->SR & (DAC_SR_CAL_FLAG1<<Channel)) == RESET)
EricLew 0:80ee8f3b695e 377 {
EricLew 0:80ee8f3b695e 378 /* DAC_SR_CAL_FLAGx is HIGH try higher trimming */
EricLew 0:80ee8f3b695e 379 trimmingvalue += delta;
EricLew 0:80ee8f3b695e 380 }
EricLew 0:80ee8f3b695e 381 else
EricLew 0:80ee8f3b695e 382 {
EricLew 0:80ee8f3b695e 383 /* DAC_SR_CAL_FLAGx is LOW try lower trimming */
EricLew 0:80ee8f3b695e 384 trimmingvalue -= delta;
EricLew 0:80ee8f3b695e 385 }
EricLew 0:80ee8f3b695e 386 delta >>= 1;
EricLew 0:80ee8f3b695e 387 }
EricLew 0:80ee8f3b695e 388
EricLew 0:80ee8f3b695e 389 /* Still need to check if right calibration is current value or one step below */
EricLew 0:80ee8f3b695e 390 /* Indeed the first value that causes the DAC_SR_CAL_FLAGx bit to change from 0 to 1 */
EricLew 0:80ee8f3b695e 391 /* Set candidate trimming */
EricLew 0:80ee8f3b695e 392 MODIFY_REG(hdac->Instance->CCR, (DAC_CCR_OTRIM1<<Channel), (trimmingvalue<<Channel));
EricLew 0:80ee8f3b695e 393
EricLew 0:80ee8f3b695e 394 /* tOFFTRIMmax delay x ms as per datasheet (electrical characteristics */
EricLew 0:80ee8f3b695e 395 /* i.e. minimum time needed between two calibration steps */
EricLew 0:80ee8f3b695e 396 HAL_Delay(1);
EricLew 0:80ee8f3b695e 397
EricLew 0:80ee8f3b695e 398 if ((hdac->Instance->SR & (DAC_SR_CAL_FLAG1<<Channel)) == RESET)
EricLew 0:80ee8f3b695e 399 {
EricLew 0:80ee8f3b695e 400 /* OPAMP_CSR_OUTCAL is actually one value more */
EricLew 0:80ee8f3b695e 401 trimmingvalue++;
EricLew 0:80ee8f3b695e 402 /* Set right trimming */
EricLew 0:80ee8f3b695e 403 MODIFY_REG(hdac->Instance->CCR, (DAC_CCR_OTRIM1<<Channel), (trimmingvalue<<Channel));
EricLew 0:80ee8f3b695e 404 }
EricLew 0:80ee8f3b695e 405
EricLew 0:80ee8f3b695e 406 /* Disable the selected DAC channel calibration */
EricLew 0:80ee8f3b695e 407 /* i.e. clear DAC_CR_CENx bit */
EricLew 0:80ee8f3b695e 408 CLEAR_BIT ((hdac->Instance->CR), (DAC_CR_CEN1 << Channel));
EricLew 0:80ee8f3b695e 409
EricLew 0:80ee8f3b695e 410 sConfig->DAC_TrimmingValue = trimmingvalue;
EricLew 0:80ee8f3b695e 411 sConfig->DAC_UserTrimming = DAC_TRIMMING_USER;
EricLew 0:80ee8f3b695e 412
EricLew 0:80ee8f3b695e 413 /* Restore configuration */
EricLew 0:80ee8f3b695e 414 MODIFY_REG(hdac->Instance->MCR, (DAC_MCR_MODE1 << Channel), oldmodeconfiguration);
EricLew 0:80ee8f3b695e 415
EricLew 0:80ee8f3b695e 416 /* Process unlocked */
EricLew 0:80ee8f3b695e 417 __HAL_UNLOCK(hdac);
EricLew 0:80ee8f3b695e 418
EricLew 0:80ee8f3b695e 419 return status;
EricLew 0:80ee8f3b695e 420 }
EricLew 0:80ee8f3b695e 421
EricLew 0:80ee8f3b695e 422 /**
EricLew 0:80ee8f3b695e 423 * @brief Set the trimming mode and trimming value (user trimming mode applied).
EricLew 0:80ee8f3b695e 424 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 425 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 426 * @param sConfig: DAC configuration structure updated with new DAC trimming value.
EricLew 0:80ee8f3b695e 427 * @param Channel: The selected DAC channel.
EricLew 0:80ee8f3b695e 428 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 429 * @arg DAC_CHANNEL_1: DAC Channel1 selected
EricLew 0:80ee8f3b695e 430 * @arg DAC_CHANNEL_2: DAC Channel2 selected
EricLew 0:80ee8f3b695e 431 * @param NewTrimmingValue: DAC new trimming value
EricLew 0:80ee8f3b695e 432 * @retval HAL status
EricLew 0:80ee8f3b695e 433 */
EricLew 0:80ee8f3b695e 434
EricLew 0:80ee8f3b695e 435 HAL_StatusTypeDef HAL_DACEx_SetUserTrimming (DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel, uint32_t NewTrimmingValue)
EricLew 0:80ee8f3b695e 436 {
EricLew 0:80ee8f3b695e 437 HAL_StatusTypeDef status = HAL_OK;
EricLew 0:80ee8f3b695e 438
EricLew 0:80ee8f3b695e 439 /* Check the parameters */
EricLew 0:80ee8f3b695e 440 assert_param(IS_DAC_CHANNEL(Channel));
EricLew 0:80ee8f3b695e 441 assert_param(IS_DAC_NEWTRIMMINGVALUE(NewTrimmingValue));
EricLew 0:80ee8f3b695e 442
EricLew 0:80ee8f3b695e 443 /* Check the DAC handle allocation */
EricLew 0:80ee8f3b695e 444 if(hdac == NULL)
EricLew 0:80ee8f3b695e 445 {
EricLew 0:80ee8f3b695e 446 status = HAL_ERROR;
EricLew 0:80ee8f3b695e 447 }
EricLew 0:80ee8f3b695e 448
EricLew 0:80ee8f3b695e 449 /* Process locked */
EricLew 0:80ee8f3b695e 450 __HAL_LOCK(hdac);
EricLew 0:80ee8f3b695e 451
EricLew 0:80ee8f3b695e 452 /* Set new trimming */
EricLew 0:80ee8f3b695e 453 MODIFY_REG(hdac->Instance->CCR, (DAC_CCR_OTRIM1<<Channel), (NewTrimmingValue<<Channel));
EricLew 0:80ee8f3b695e 454
EricLew 0:80ee8f3b695e 455 /* Update trimming mode */
EricLew 0:80ee8f3b695e 456 sConfig->DAC_UserTrimming = DAC_TRIMMING_USER;
EricLew 0:80ee8f3b695e 457 sConfig->DAC_TrimmingValue = NewTrimmingValue;
EricLew 0:80ee8f3b695e 458
EricLew 0:80ee8f3b695e 459 /* Process unlocked */
EricLew 0:80ee8f3b695e 460 __HAL_UNLOCK(hdac);
EricLew 0:80ee8f3b695e 461
EricLew 0:80ee8f3b695e 462 return status;
EricLew 0:80ee8f3b695e 463 }
EricLew 0:80ee8f3b695e 464
EricLew 0:80ee8f3b695e 465 /**
EricLew 0:80ee8f3b695e 466 * @brief Return the DAC trimming value.
EricLew 0:80ee8f3b695e 467 * @param hdac : DAC handle
EricLew 0:80ee8f3b695e 468 * @param Channel: The selected DAC channel.
EricLew 0:80ee8f3b695e 469 * This parameter can be one of the following values:
EricLew 0:80ee8f3b695e 470 * @arg DAC_CHANNEL_1: DAC Channel1 selected
EricLew 0:80ee8f3b695e 471 * @arg DAC_CHANNEL_2: DAC Channel2 selected
EricLew 0:80ee8f3b695e 472 * @retval Trimming value : range: 0->31
EricLew 0:80ee8f3b695e 473 *
EricLew 0:80ee8f3b695e 474 */
EricLew 0:80ee8f3b695e 475
EricLew 0:80ee8f3b695e 476 uint32_t HAL_DACEx_GetTrimOffset (DAC_HandleTypeDef *hdac, uint32_t Channel)
EricLew 0:80ee8f3b695e 477 {
EricLew 0:80ee8f3b695e 478 uint32_t trimmingvalue = 0;
EricLew 0:80ee8f3b695e 479
EricLew 0:80ee8f3b695e 480 /* Check the DAC handle allocation */
EricLew 0:80ee8f3b695e 481 /* And not in Reset state */
EricLew 0:80ee8f3b695e 482 if((hdac == NULL) || (hdac->State == HAL_DAC_STATE_RESET))
EricLew 0:80ee8f3b695e 483 {
EricLew 0:80ee8f3b695e 484 return HAL_ERROR;
EricLew 0:80ee8f3b695e 485 }
EricLew 0:80ee8f3b695e 486 else
EricLew 0:80ee8f3b695e 487 {
EricLew 0:80ee8f3b695e 488 /* Check the parameter */
EricLew 0:80ee8f3b695e 489 assert_param(IS_DAC_CHANNEL(Channel));
EricLew 0:80ee8f3b695e 490
EricLew 0:80ee8f3b695e 491 /* Retrieve trimming */
EricLew 0:80ee8f3b695e 492 trimmingvalue = ((hdac->Instance->CCR & (DAC_CCR_OTRIM1 << Channel)) >> Channel);
EricLew 0:80ee8f3b695e 493 }
EricLew 0:80ee8f3b695e 494 return trimmingvalue;
EricLew 0:80ee8f3b695e 495 }
EricLew 0:80ee8f3b695e 496
EricLew 0:80ee8f3b695e 497 /**
EricLew 0:80ee8f3b695e 498 * @}
EricLew 0:80ee8f3b695e 499 */
EricLew 0:80ee8f3b695e 500
EricLew 0:80ee8f3b695e 501 /** @defgroup DACEx_Exported_Functions_Group3 Peripheral Control functions
EricLew 0:80ee8f3b695e 502 * @brief Extended Peripheral Control functions
EricLew 0:80ee8f3b695e 503 *
EricLew 0:80ee8f3b695e 504 @verbatim
EricLew 0:80ee8f3b695e 505 ==============================================================================
EricLew 0:80ee8f3b695e 506 ##### Peripheral Control functions #####
EricLew 0:80ee8f3b695e 507 ==============================================================================
EricLew 0:80ee8f3b695e 508 [..] This section provides functions allowing to:
EricLew 0:80ee8f3b695e 509 (+) Configure channels.
EricLew 0:80ee8f3b695e 510 (+) Set the specified data holding register value for DAC channel.
EricLew 0:80ee8f3b695e 511
EricLew 0:80ee8f3b695e 512 @endverbatim
EricLew 0:80ee8f3b695e 513 * @{
EricLew 0:80ee8f3b695e 514 */
EricLew 0:80ee8f3b695e 515
EricLew 0:80ee8f3b695e 516 /**
EricLew 0:80ee8f3b695e 517 * @brief Return the last data output value of the selected DAC channel.
EricLew 0:80ee8f3b695e 518 * @param hdac: pointer to a DAC_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 519 * the configuration information for the specified DAC.
EricLew 0:80ee8f3b695e 520 * @retval The selected DAC channel data output value.
EricLew 0:80ee8f3b695e 521 */
EricLew 0:80ee8f3b695e 522 uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac)
EricLew 0:80ee8f3b695e 523 {
EricLew 0:80ee8f3b695e 524 uint32_t tmp = 0;
EricLew 0:80ee8f3b695e 525
EricLew 0:80ee8f3b695e 526 tmp |= hdac->Instance->DOR1;
EricLew 0:80ee8f3b695e 527
EricLew 0:80ee8f3b695e 528 tmp |= hdac->Instance->DOR2 << 16;
EricLew 0:80ee8f3b695e 529
EricLew 0:80ee8f3b695e 530 /* Returns the DAC channel data output register value */
EricLew 0:80ee8f3b695e 531 return tmp;
EricLew 0:80ee8f3b695e 532 }
EricLew 0:80ee8f3b695e 533
EricLew 0:80ee8f3b695e 534 /**
EricLew 0:80ee8f3b695e 535 * @}
EricLew 0:80ee8f3b695e 536 */
EricLew 0:80ee8f3b695e 537
EricLew 0:80ee8f3b695e 538 /**
EricLew 0:80ee8f3b695e 539 * @}
EricLew 0:80ee8f3b695e 540 */
EricLew 0:80ee8f3b695e 541
EricLew 0:80ee8f3b695e 542 /* Private functions ---------------------------------------------------------*/
EricLew 0:80ee8f3b695e 543 /** @defgroup DACEx_Private_Functions DACEx private functions
EricLew 0:80ee8f3b695e 544 * @brief Extended private functions
EricLew 0:80ee8f3b695e 545 * @{
EricLew 0:80ee8f3b695e 546 */
EricLew 0:80ee8f3b695e 547
EricLew 0:80ee8f3b695e 548 /**
EricLew 0:80ee8f3b695e 549 * @brief DMA conversion complete callback.
EricLew 0:80ee8f3b695e 550 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 551 * the configuration information for the specified DMA module.
EricLew 0:80ee8f3b695e 552 * @retval None
EricLew 0:80ee8f3b695e 553 */
EricLew 0:80ee8f3b695e 554 void DAC_DMAConvCpltCh2(DMA_HandleTypeDef *hdma)
EricLew 0:80ee8f3b695e 555 {
EricLew 0:80ee8f3b695e 556 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
EricLew 0:80ee8f3b695e 557
EricLew 0:80ee8f3b695e 558 HAL_DACEx_ConvCpltCallbackCh2(hdac);
EricLew 0:80ee8f3b695e 559
EricLew 0:80ee8f3b695e 560 hdac->State= HAL_DAC_STATE_READY;
EricLew 0:80ee8f3b695e 561 }
EricLew 0:80ee8f3b695e 562
EricLew 0:80ee8f3b695e 563 /**
EricLew 0:80ee8f3b695e 564 * @brief DMA half transfer complete callback.
EricLew 0:80ee8f3b695e 565 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 566 * the configuration information for the specified DMA module.
EricLew 0:80ee8f3b695e 567 * @retval None
EricLew 0:80ee8f3b695e 568 */
EricLew 0:80ee8f3b695e 569 void DAC_DMAHalfConvCpltCh2(DMA_HandleTypeDef *hdma)
EricLew 0:80ee8f3b695e 570 {
EricLew 0:80ee8f3b695e 571 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
EricLew 0:80ee8f3b695e 572 /* Conversion complete callback */
EricLew 0:80ee8f3b695e 573 HAL_DACEx_ConvHalfCpltCallbackCh2(hdac);
EricLew 0:80ee8f3b695e 574 }
EricLew 0:80ee8f3b695e 575
EricLew 0:80ee8f3b695e 576 /**
EricLew 0:80ee8f3b695e 577 * @brief DMA error callback.
EricLew 0:80ee8f3b695e 578 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
EricLew 0:80ee8f3b695e 579 * the configuration information for the specified DMA module.
EricLew 0:80ee8f3b695e 580 * @retval None
EricLew 0:80ee8f3b695e 581 */
EricLew 0:80ee8f3b695e 582 void DAC_DMAErrorCh2(DMA_HandleTypeDef *hdma)
EricLew 0:80ee8f3b695e 583 {
EricLew 0:80ee8f3b695e 584 DAC_HandleTypeDef* hdac = ( DAC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
EricLew 0:80ee8f3b695e 585
EricLew 0:80ee8f3b695e 586 /* Set DAC error code to DMA error */
EricLew 0:80ee8f3b695e 587 hdac->ErrorCode |= HAL_DAC_ERROR_DMA;
EricLew 0:80ee8f3b695e 588
EricLew 0:80ee8f3b695e 589 HAL_DACEx_ErrorCallbackCh2(hdac);
EricLew 0:80ee8f3b695e 590
EricLew 0:80ee8f3b695e 591 hdac->State= HAL_DAC_STATE_READY;
EricLew 0:80ee8f3b695e 592 }
EricLew 0:80ee8f3b695e 593
EricLew 0:80ee8f3b695e 594 /**
EricLew 0:80ee8f3b695e 595 * @}
EricLew 0:80ee8f3b695e 596 */
EricLew 0:80ee8f3b695e 597
EricLew 0:80ee8f3b695e 598 #endif /* HAL_DAC_MODULE_ENABLED */
EricLew 0:80ee8f3b695e 599
EricLew 0:80ee8f3b695e 600 /**
EricLew 0:80ee8f3b695e 601 * @}
EricLew 0:80ee8f3b695e 602 */
EricLew 0:80ee8f3b695e 603
EricLew 0:80ee8f3b695e 604 /**
EricLew 0:80ee8f3b695e 605 * @}
EricLew 0:80ee8f3b695e 606 */
EricLew 0:80ee8f3b695e 607
EricLew 0:80ee8f3b695e 608 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
EricLew 0:80ee8f3b695e 609