fix LPC812 PWM

Dependents:   IR_LED_Send

Fork of mbed-dev by mbed official

Committer:
nameless129
Date:
Mon May 16 16:50:30 2016 +0000
Revision:
129:2e517c56bcfb
Parent:
0:9b334a45a8ff
PWM Fix:Duty 0%??H???????????????

Who changed what in which revision?

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