亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stm32l1xx_dac.c

?? VS1003_MP3_SPI_SDHC_FAT32
?? C
?? 第 1 頁 / 共 2 頁
字號:
/**
  ******************************************************************************
  * @file    stm32l1xx_dac.c
  * @author  MCD Application Team
  * @version V1.1.0
  * @date    24-January-2012
  * @brief   This file provides firmware functions to manage the following 
  *          functionalities of the Digital-to-Analog Converter (DAC) peripheral: 
  *          + DAC channels configuration: trigger, output buffer, data format
  *          + DMA management      
  *          + Interrupts and flags management

  * @verbatim      
  *   
 ===============================================================================
                        ##### DAC Peripheral features #####
 ===============================================================================
    [..] The device integrates two 12-bit Digital Analog Converters that can 
         be used independently or simultaneously (dual mode):
         (#) DAC channel1 with DAC_OUT1 (PA4) as output.
         (#) DAC channel2 with DAC_OUT2 (PA5) as output.
  
    [..] Digital to Analog conversion can be non-triggered using DAC_Trigger_None
         and DAC_OUT1/DAC_OUT2 is available once writing to DHRx register using 
         DAC_SetChannel1Data()/DAC_SetChannel2Data.
  
    [..] Digital to Analog conversion can be triggered by:
         (#) External event: EXTI Line 9 (any GPIOx_Pin9) using DAC_Trigger_Ext_IT9.
             The used pin (GPIOx_Pin9) must be configured in input mode.
         (#) Timers TRGO: TIM2, TIM4, TIM6, TIM7 and TIM9 
             (DAC_Trigger_T2_TRGO, DAC_Trigger_T4_TRGO...).
             The timer TRGO event should be selected using TIM_SelectOutputTrigger()
         (#) Software using DAC_Trigger_Software.
  
    [..] Each DAC channel integrates an output buffer that can be used to 
         reduce the output impedance, and to drive external loads directly
         without having to add an external operational amplifier.
         To enable, the output buffer use  
         DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
            
    [..] Refer to the device datasheet for more details about output impedance
         value with and without output buffer.
  
    [..] Both DAC channels can be used to generate:
         (#) Noise wave using DAC_WaveGeneration_Noise
         (#) Triangle wave using DAC_WaveGeneration_Triangle
  
    [..] Wave generation can be disabled using DAC_WaveGeneration_None.
  
    [..] The DAC data format can be:
         (#) 8-bit right alignment using DAC_Align_8b_R
         (#) 12-bit left alignment using DAC_Align_12b_L
         (#) 12-bit right alignment using DAC_Align_12b_R
  
    [..] The analog output voltage on each DAC channel pin is determined
         by the following equation: DAC_OUTx = VREF+ * DOR / 4095
         with  DOR is the Data Output Register.
         VEF+ is the input voltage reference (refer to the device datasheet)
         e.g. To set DAC_OUT1 to 0.7V, use
         DAC_SetChannel1Data(DAC_Align_12b_R, 868);
         Assuming that VREF+ = 3.3, DAC_OUT1 = (3.3 * 868) / 4095 = 0.7V.
  
    [..] A DMA1 request can be generated when an external trigger (but not
         a software trigger) occurs if DMA1 requests are enabled using
         DAC_DMACmd()
    [..] DMA1 requests are mapped as following:
         (#) DAC channel1 is mapped on DMA1 channel3 which must be already 
             configured.
         (#) DAC channel2 is mapped on DMA1 channel4 which must be already 
             configured.
  
                      ##### How to use this driver #####
 ===============================================================================
    [..]
        (+) DAC APB clock must be enabled to get write access to DAC registers using
            RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE)
        (+) Configure DAC_OUTx (DAC_OUT1: PA4, DAC_OUT2: PA5) in analog mode.
        (+) Configure the DAC channel using DAC_Init()
        (+) Enable the DAC channel using DAC_Cmd()

   @endverbatim
  *    
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * FOR MORE INFORMATION PLEASE READ CAREFULLY THE LICENSE AGREEMENT FILE
  * LOCATED IN THE ROOT DIRECTORY OF THIS FIRMWARE PACKAGE.
  *
  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32l1xx_dac.h"
#include "stm32l1xx_rcc.h"

/** @addtogroup STM32L1xx_StdPeriph_Driver
  * @{
  */

/** @defgroup DAC 
  * @brief DAC driver modules
  * @{
  */ 

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* CR register Mask */
#define CR_CLEAR_MASK              ((uint32_t)0x00000FFE)

/* DAC Dual Channels SWTRIG masks */
#define DUAL_SWTRIG_SET            ((uint32_t)0x00000003)
#define DUAL_SWTRIG_RESET          ((uint32_t)0xFFFFFFFC)

/* DHR registers offsets */
#define DHR12R1_OFFSET             ((uint32_t)0x00000008)
#define DHR12R2_OFFSET             ((uint32_t)0x00000014)
#define DHR12RD_OFFSET             ((uint32_t)0x00000020)

/* DOR register offset */
#define DOR_OFFSET                 ((uint32_t)0x0000002C)

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/** @defgroup DAC_Private_Functions
  * @{
  */ 

/** @defgroup DAC_Group1 DAC channels configuration
 *  @brief   DAC channels configuration: trigger, output buffer, data format.
 *
@verbatim
 ===============================================================================
  ##### DAC channels configuration: trigger, output buffer, data format #####
 ===============================================================================

@endverbatim
  * @{
  */

/**
  * @brief  Deinitializes the DAC peripheral registers to their default reset values.
  * @param  None
  * @retval None
  */
void DAC_DeInit(void)
{
  /* Enable DAC reset state */
  RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);
  /* Release DAC from reset state */
  RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);
}

/**
  * @brief  Initializes the DAC peripheral according to the specified 
  *         parameters in the DAC_InitStruct.
  * @param  DAC_Channel: the selected DAC channel.
  *   This parameter can be one of the following values:
  *     @arg DAC_Channel_1: DAC Channel1 selected.
  *     @arg DAC_Channel_2: DAC Channel2 selected.
  * @param  DAC_InitStruct: pointer to a DAC_InitTypeDef structure that
  *         contains the configuration information for the specified DAC channel.
  * @retval None
  */
void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
{
  uint32_t tmpreg1 = 0, tmpreg2 = 0;

  /* Check the DAC parameters */
  assert_param(IS_DAC_CHANNEL(DAC_Channel));
  assert_param(IS_DAC_TRIGGER(DAC_InitStruct->DAC_Trigger));
  assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));
  assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));
  assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));

/*---------------------------- DAC CR Configuration --------------------------*/
  /* Get the DAC CR value */
  tmpreg1 = DAC->CR;
  /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
  tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel);
  /* Configure for the selected DAC channel: buffer output, trigger, wave generation,
     mask/amplitude for wave generation */
  /* Set TSELx and TENx bits according to DAC_Trigger value */
  /* Set WAVEx bits according to DAC_WaveGeneration value */
  /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ 
  /* Set BOFFx bit according to DAC_OutputBuffer value */   
  tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
             DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
  /* Calculate CR register value depending on DAC_Channel */
  tmpreg1 |= tmpreg2 << DAC_Channel;
  /* Write to DAC CR */
  DAC->CR = tmpreg1;
}

/**
  * @brief  Fills each DAC_InitStruct member with its default value.
  * @param  DAC_InitStruct: pointer to a DAC_InitTypeDef structure which will 
  *         be initialized.
  * @retval None
  */
void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)
{
/*--------------- Reset DAC init structure parameters values -----------------*/
  /* Initialize the DAC_Trigger member */
  DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;
  /* Initialize the DAC_WaveGeneration member */
  DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;
  /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */
  DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
  /* Initialize the DAC_OutputBuffer member */
  DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;
}

/**
  * @brief  Enables or disables the specified DAC channel.
  * @param  DAC_Channel: The selected DAC channel. 
  *   This parameter can be one of the following values:
  *     @arg DAC_Channel_1: DAC Channel1 selected
  *     @arg DAC_Channel_2: DAC Channel2 selected
  * @param  NewState: new state of the DAC channel. 
  *      This parameter can be: ENABLE or DISABLE.
  * @note When the DAC channel is enabled the trigger source can no more
  *       be modified.
  * @retval None
  */
void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_DAC_CHANNEL(DAC_Channel));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected DAC channel */
    DAC->CR |= (DAC_CR_EN1 << DAC_Channel);
  }
  else
  {
    /* Disable the selected DAC channel */
    DAC->CR &= (~(DAC_CR_EN1 << DAC_Channel));
  }
}

/**
  * @brief  Enables or disables the selected DAC channel software trigger.
  * @param  DAC_Channel: the selected DAC channel.
  *   This parameter can be one of the following values:
  *     @arg DAC_Channel_1: DAC Channel1 selected
  *     @arg DAC_Channel_2: DAC Channel2 selected
  * @param  NewState: new state of the selected DAC channel software trigger.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_DAC_CHANNEL(DAC_Channel));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable software trigger for the selected DAC channel */
    DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4);
  }
  else
  {
    /* Disable software trigger for the selected DAC channel */
    DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
  }
}

/**
  * @brief  Enables or disables simultaneously the two DAC channels software
  *         triggers.
  * @param  NewState: new state of the DAC channels software triggers.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable software trigger for both DAC channels */
    DAC->SWTRIGR |= DUAL_SWTRIG_SET;
  }
  else
  {
    /* Disable software trigger for both DAC channels */
    DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
  }
}

/**
  * @brief  Enables or disables the selected DAC channel wave generation.
  * @param  DAC_Channel: the selected DAC channel.
  *   This parameter can be one of the following values:
  *     @arg DAC_Channel_1: DAC Channel1 selected
  *     @arg DAC_Channel_2: DAC Channel2 selected
  * @param  DAC_Wave: Specifies the wave type to enable or disable.
  *   This parameter can be one of the following values:
  *     @arg DAC_Wave_Noise: noise wave generation
  *     @arg DAC_Wave_Triangle: triangle wave generation
  * @param  NewState: new state of the selected DAC channel wave generation.
  *   This parameter can be: ENABLE or DISABLE.
  * @note   
  * @retval None
  */
void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_DAC_CHANNEL(DAC_Channel));
  assert_param(IS_DAC_WAVE(DAC_Wave)); 
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected wave generation for the selected DAC channel */
    DAC->CR |= DAC_Wave << DAC_Channel;
  }
  else
  {
    /* Disable the selected wave generation for the selected DAC channel */
    DAC->CR &= ~(DAC_Wave << DAC_Channel);
  }
}

/**
  * @brief  Set the specified data holding register value for DAC channel1.
  * @param  DAC_Align: Specifies the data alignment for DAC channel1.
  *   This parameter can be one of the following values:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人永久aaa| 日韩三级视频在线观看| 欧美日韩精品系列| 国产日韩av一区二区| 亚洲精品免费看| 国产精品综合在线视频| 91麻豆精品久久久久蜜臀 | 国产精品一区二区黑丝| 色呦呦日韩精品| 久久久久国产精品厨房| 亚洲成a人片综合在线| 国产精品一区二区三区网站| 欧美日韩免费高清一区色橹橹 | 男女激情视频一区| 在线观看亚洲成人| 最新日韩在线视频| 丰满岳乱妇一区二区三区| 日韩你懂的在线播放| 亚洲国产视频网站| 91亚洲国产成人精品一区二区三| 久久综合久色欧美综合狠狠| 蜜乳av一区二区| 欧美欧美午夜aⅴ在线观看| 亚洲日本乱码在线观看| 成人性生交大片免费看在线播放 | 中文字幕欧美一| 国产精品一区二区在线播放| 欧美精品一区二区三区一线天视频 | 亚洲欧美日韩国产一区二区三区| 国内国产精品久久| 日韩精品一区二区三区三区免费| 日本欧美一区二区| 欧美一级久久久| 麻豆成人免费电影| 精品国产免费一区二区三区四区| 裸体健美xxxx欧美裸体表演| 日韩精品中午字幕| 国内外精品视频| 国产视频一区二区三区在线观看 | 99久久精品免费看国产 | 91丨porny丨国产| 亚洲精品午夜久久久| 日本高清免费不卡视频| 亚洲va在线va天堂| 日韩欧美一区二区视频| 极品美女销魂一区二区三区| 久久九九影视网| 91伊人久久大香线蕉| 亚洲国产欧美另类丝袜| 日韩欧美亚洲一区二区| 国产精品综合二区| 亚洲欧美一区二区三区极速播放| 欧美性一区二区| 国产在线精品免费av| 成人欧美一区二区三区黑人麻豆| 97精品电影院| 青青草91视频| 国产精品水嫩水嫩| 欧美视频在线观看一区二区| 激情小说欧美图片| 综合色天天鬼久久鬼色| 在线播放91灌醉迷j高跟美女| 久久超碰97人人做人人爱| 中文字幕av免费专区久久| 一本到不卡免费一区二区| 日韩福利视频网| 中文字幕在线免费不卡| 欧美精品 日韩| 成人免费观看男女羞羞视频| 午夜欧美2019年伦理| 亚洲欧美日韩中文播放 | 欧美手机在线视频| 国产精品 欧美精品| 亚洲主播在线播放| 日本一区免费视频| 91麻豆精品国产91久久久久久久久| 国产麻豆成人精品| 亚洲成人三级小说| 国产精品嫩草影院com| 日韩欧美一级片| 欧美图片一区二区三区| 成人精品国产福利| 精品一区二区三区影院在线午夜| 亚洲欧洲av另类| 国产亚洲婷婷免费| 欧美一卡二卡三卡四卡| 欧美亚洲动漫精品| 99久久久国产精品| 国产suv一区二区三区88区| 婷婷久久综合九色综合绿巨人 | av在线播放成人| 精品午夜一区二区三区在线观看| 一区二区久久久| 国产精品丝袜一区| 日韩欧美一级精品久久| 欧美亚洲日本国产| 一本一道波多野结衣一区二区| 国内久久婷婷综合| 日韩精品91亚洲二区在线观看| 亚洲欧洲av一区二区三区久久| 久久久国产午夜精品| 精品免费国产二区三区| 91麻豆精品国产91久久久资源速度| 色94色欧美sute亚洲13| 风流少妇一区二区| 成人自拍视频在线| 国产精品1024久久| 国产一区在线视频| 国产在线精品一区二区三区不卡| 男男gaygay亚洲| 日本麻豆一区二区三区视频| 日韩av一区二区三区| 日韩在线观看一区二区| 午夜精品福利一区二区三区av| 亚洲一区二区美女| 亚洲二区视频在线| 天天色 色综合| 视频一区二区三区在线| 日韩高清国产一区在线| 蜜桃久久av一区| 另类人妖一区二区av| 麻豆成人久久精品二区三区小说| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品综合一区二区| 国产suv精品一区二区883| 国产高清一区日本| 国产成人免费视频网站高清观看视频 | 国产69精品久久久久777| 成人免费的视频| 色婷婷综合视频在线观看| 99久久精品99国产精品| 在线亚洲+欧美+日本专区| 欧美视频一区二| 日韩亚洲欧美一区二区三区| 欧美精品一区二区蜜臀亚洲| 国产日韩综合av| 亚洲欧美电影院| 视频一区国产视频| 国产一区二区日韩精品| 99久久婷婷国产| 欧美美女视频在线观看| 日韩一级大片在线观看| 欧美国产精品一区二区| 亚洲国产综合色| 韩国中文字幕2020精品| www.欧美日韩| 欧美一区二区大片| 中文字幕电影一区| 视频一区二区不卡| 国产精品123| 欧美麻豆精品久久久久久| 国产女人18毛片水真多成人如厕 | 中文字幕乱码久久午夜不卡| 亚洲美女免费在线| 蜜臀av一级做a爰片久久| www.成人网.com| 欧美一区永久视频免费观看| 国产精品美女久久久久高潮| 亚洲国产综合人成综合网站| 国产精品一区二区久久不卡| 欧美日韩一区不卡| 国产精品天天看| 麻豆国产精品视频| 色丁香久综合在线久综合在线观看| 欧美一区二区三区四区久久| 中文字幕一区二区视频| 男女男精品视频网| 在线欧美小视频| 国产人成一区二区三区影院| 日韩精品亚洲专区| 91啪在线观看| 国产性色一区二区| 青青国产91久久久久久| 色婷婷香蕉在线一区二区| 国产日韩v精品一区二区| 久久国产精品99久久久久久老狼| 91蝌蚪porny| 国产日韩欧美不卡| 麻豆高清免费国产一区| 欧美性猛交xxxx乱大交退制版 | 91片黄在线观看| 国产日韩av一区| 久久99日本精品| 91精品久久久久久久99蜜桃| 亚洲免费av高清| av电影天堂一区二区在线| 久久精品欧美一区二区三区麻豆 | 精品日韩欧美一区二区| 视频一区二区不卡| 欧美精品视频www在线观看| 亚洲精品免费一二三区| 色一情一伦一子一伦一区| 国产精品的网站| 国产成人精品亚洲午夜麻豆| 亚洲精品在线三区| 麻豆一区二区在线| 精品国产一区二区亚洲人成毛片 | 成人avav影音| 亚洲欧美在线视频| www.欧美日韩|