mbed library with additional peripherals for ST F401 board

Fork of mbed-src by mbed official

This mbed LIB has additional peripherals for ST F401 board

  • UART2 : PA_3 rx, PA_2 tx
  • UART3 : PC_7 rx, PC_6 tx
  • I2C2 : PB_3 SDA, PB_10 SCL
  • I2C3 : PB_4 SDA, PA_8 SCL
Committer:
mbed_official
Date:
Wed Feb 26 09:45:12 2014 +0000
Revision:
106:ced8cbb51063
Parent:
87:085cde657901
Synchronized with git revision 4222735eff5868389433f0e9271976b39c8115cd

Full URL: https://github.com/mbedmicro/mbed/commit/4222735eff5868389433f0e9271976b39c8115cd/

[NUCLEO_xxx] Update STM32CubeF4 driver V1.0.0 + update license

Who changed what in which revision?

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