STM32F479xx HAL User Manual
stm32f4xx_ll_dac.c
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f4xx_ll_dac.c
00004   * @author  MCD Application Team
00005   * @brief   DAC LL module driver
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                        opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 #if defined(USE_FULL_LL_DRIVER)
00020 
00021 /* Includes ------------------------------------------------------------------*/
00022 #include "stm32f4xx_ll_dac.h"
00023 #include "stm32f4xx_ll_bus.h"
00024 
00025 #ifdef USE_FULL_ASSERT
00026 #include "stm32_assert.h"
00027 #else
00028 #define assert_param(expr) ((void)0U)
00029 #endif /* USE_FULL_ASSERT */
00030 
00031 /** @addtogroup STM32F4xx_LL_Driver
00032   * @{
00033   */
00034 
00035 #if defined(DAC)
00036 
00037 /** @addtogroup DAC_LL DAC
00038   * @{
00039   */
00040 
00041 /* Private types -------------------------------------------------------------*/
00042 /* Private variables ---------------------------------------------------------*/
00043 /* Private constants ---------------------------------------------------------*/
00044 /* Private macros ------------------------------------------------------------*/
00045 
00046 /** @addtogroup DAC_LL_Private_Macros
00047   * @{
00048   */
00049 #if defined(DAC_CHANNEL2_SUPPORT)
00050 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                           \
00051   (                                                                            \
00052       ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                  \
00053    || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2)                                  \
00054   )
00055 #else
00056 #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                           \
00057   (                                                                            \
00058    ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                     \
00059   )
00060 #endif /* DAC_CHANNEL2_SUPPORT */
00061 
00062 #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__)                           \
00063   (   ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                           \
00064    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                      \
00065    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                      \
00066    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO)                      \
00067    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                      \
00068    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                      \
00069    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO)                      \
00070    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9)                     \
00071   )
00072 
00073 #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__)              \
00074   (   ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE)        \
00075       || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)    \
00076       || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
00077   )
00078 
00079 #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_MODE__, __WAVE_AUTO_GENERATION_CONFIG__)  \
00080   ( (((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)                               \
00081      && (  ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0)                           \
00082            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0)                     \
00083            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0)                     \
00084            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0)                     \
00085            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0)                     \
00086            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0)                     \
00087            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0)                     \
00088            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0)                     \
00089            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0)                     \
00090            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0)                     \
00091            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0)                    \
00092            || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0))                   \
00093     )                                                                                                     \
00094     ||(((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE)                          \
00095        && (  ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1)                           \
00096              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3)                        \
00097              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7)                        \
00098              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15)                       \
00099              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31)                       \
00100              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63)                       \
00101              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127)                      \
00102              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255)                      \
00103              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511)                      \
00104              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023)                     \
00105              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047)                     \
00106              || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095))                    \
00107       )                                                                                                   \
00108   )
00109 
00110 #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__)                             \
00111   (   ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE)                     \
00112       || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE)                 \
00113   )
00114 
00115 /**
00116   * @}
00117   */
00118 
00119 
00120 /* Private function prototypes -----------------------------------------------*/
00121 
00122 /* Exported functions --------------------------------------------------------*/
00123 /** @addtogroup DAC_LL_Exported_Functions
00124   * @{
00125   */
00126 
00127 /** @addtogroup DAC_LL_EF_Init
00128   * @{
00129   */
00130 
00131 /**
00132   * @brief  De-initialize registers of the selected DAC instance
00133   *         to their default reset values.
00134   * @param  DACx DAC instance
00135   * @retval An ErrorStatus enumeration value:
00136   *          - SUCCESS: DAC registers are de-initialized
00137   *          - ERROR: not applicable
00138   */
00139 ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx)
00140 {
00141   /* Check the parameters */
00142   assert_param(IS_DAC_ALL_INSTANCE(DACx));
00143 
00144   /* Force reset of DAC clock */
00145   LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1);
00146 
00147   /* Release reset of DAC clock */
00148   LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1);
00149 
00150   return SUCCESS;
00151 }
00152 
00153 /**
00154   * @brief  Initialize some features of DAC channel.
00155   * @note   @ref LL_DAC_Init() aims to ease basic configuration of a DAC channel.
00156   *         Leaving it ready to be enabled and output:
00157   *         a level by calling one of
00158   *           @ref LL_DAC_ConvertData12RightAligned
00159   *           @ref LL_DAC_ConvertData12LeftAligned
00160   *           @ref LL_DAC_ConvertData8RightAligned
00161   *         or one of the supported autogenerated wave.
00162   * @note   This function allows configuration of:
00163   *          - Output mode
00164   *          - Trigger
00165   *          - Wave generation
00166   * @note   The setting of these parameters by function @ref LL_DAC_Init()
00167   *         is conditioned to DAC state:
00168   *         DAC channel must be disabled.
00169   * @param  DACx DAC instance
00170   * @param  DAC_Channel This parameter can be one of the following values:
00171   *         @arg @ref LL_DAC_CHANNEL_1
00172   *         @arg @ref LL_DAC_CHANNEL_2 (1)
00173   *         
00174   *         (1) On this STM32 serie, parameter not available on all devices.
00175   *             Refer to device datasheet for channels availability.
00176   * @param  DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
00177   * @retval An ErrorStatus enumeration value:
00178   *          - SUCCESS: DAC registers are initialized
00179   *          - ERROR: DAC registers are not initialized
00180   */
00181 ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct)
00182 {
00183   ErrorStatus status = SUCCESS;
00184 
00185   /* Check the parameters */
00186   assert_param(IS_DAC_ALL_INSTANCE(DACx));
00187   assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel));
00188   assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
00189   assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
00190   assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
00191   if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
00192   {
00193     assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGeneration,
00194                                                   DAC_InitStruct->WaveAutoGenerationConfig));
00195   }
00196 
00197   /* Note: Hardware constraint (refer to description of this function)        */
00198   /*       DAC instance must be disabled.                                     */
00199   if (LL_DAC_IsEnabled(DACx, DAC_Channel) == 0UL)
00200   {
00201     /* Configuration of DAC channel:                                          */
00202     /*  - TriggerSource                                                       */
00203     /*  - WaveAutoGeneration                                                  */
00204     /*  - OutputBuffer                                                        */
00205     /*  - OutputMode                                                          */
00206     if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
00207     {
00208       MODIFY_REG(DACx->CR,
00209                  (DAC_CR_TSEL1
00210                   | DAC_CR_WAVE1
00211                   | DAC_CR_MAMP1
00212                   | DAC_CR_BOFF1
00213                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
00214                  ,
00215                  (DAC_InitStruct->TriggerSource
00216                   | DAC_InitStruct->WaveAutoGeneration
00217                   | DAC_InitStruct->WaveAutoGenerationConfig
00218                   | DAC_InitStruct->OutputBuffer
00219                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
00220                 );
00221     }
00222     else
00223     {
00224       MODIFY_REG(DACx->CR,
00225                  (DAC_CR_TSEL1
00226                   | DAC_CR_WAVE1
00227                   | DAC_CR_BOFF1
00228                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
00229                  ,
00230                  (DAC_InitStruct->TriggerSource
00231                   | LL_DAC_WAVE_AUTO_GENERATION_NONE
00232                   | DAC_InitStruct->OutputBuffer
00233                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
00234                 );
00235     }
00236   }
00237   else
00238   {
00239     /* Initialization error: DAC instance is not disabled.                    */
00240     status = ERROR;
00241   }
00242   return status;
00243 }
00244 
00245 /**
00246   * @brief Set each @ref LL_DAC_InitTypeDef field to default value.
00247   * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
00248   *                       whose fields will be set to default values.
00249   * @retval None
00250   */
00251 void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
00252 {
00253   /* Set DAC_InitStruct fields to default values */
00254   DAC_InitStruct->TriggerSource            = LL_DAC_TRIG_SOFTWARE;
00255   DAC_InitStruct->WaveAutoGeneration       = LL_DAC_WAVE_AUTO_GENERATION_NONE;
00256   /* Note: Parameter discarded if wave auto generation is disabled,           */
00257   /*       set anyway to its default value.                                   */
00258   DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
00259   DAC_InitStruct->OutputBuffer             = LL_DAC_OUTPUT_BUFFER_ENABLE;
00260 }
00261 
00262 /**
00263   * @}
00264   */
00265 
00266 /**
00267   * @}
00268   */
00269 
00270 /**
00271   * @}
00272   */
00273 
00274 #endif /* DAC */
00275 
00276 /**
00277   * @}
00278   */
00279 
00280 #endif /* USE_FULL_LL_DRIVER */
00281 
00282 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/