亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲高清免费视频| 激情久久五月天| 欧美三级韩国三级日本三斤| 91丝袜美女网| 亚洲国产精品激情在线观看| www.亚洲色图| 亚洲国产人成综合网站| 欧美日韩国产区一| 午夜久久久久久| 国产喂奶挤奶一区二区三区| 久久综合久久综合亚洲| 欧美一级高清大全免费观看| 欧美午夜影院一区| 欧美三级乱人伦电影| 欧美午夜精品久久久| 图片区小说区区亚洲影院| 制服.丝袜.亚洲.中文.综合| 久久99国产精品久久99| 亚洲激情一二三区| 欧美一区日韩一区| 国产一区二区三区国产| 蜜桃传媒麻豆第一区在线观看| 亚洲免费观看高清完整版在线 | 久久91精品久久久久久秒播| 欧美一区二区三区系列电影| 国产最新精品免费| 欧美一卡二卡三卡| 成人午夜精品在线| 自拍偷在线精品自拍偷无码专区| 欧美探花视频资源| 成人免费观看视频| 美女在线观看视频一区二区| 亚洲欧美一区二区在线观看| 欧美一区二区精品在线| 欧美在线制服丝袜| av在线播放成人| 国产成人综合在线| 美女视频网站黄色亚洲| 国产精品女上位| 欧美久久一二三四区| 不卡区在线中文字幕| 蜜桃av噜噜一区二区三区小说| 亚洲精品午夜久久久| 久久亚区不卡日本| 精品99久久久久久| 日韩三级高清在线| 精品少妇一区二区三区在线播放 | 亚洲女人****多毛耸耸8| 久久久综合九色合综国产精品| 欧美r级电影在线观看| 欧美精品tushy高清| 欧美一级精品大片| 日韩三级免费观看| 欧美一二三四区在线| 日本韩国欧美三级| 精品视频在线看| 91精品国产综合久久精品性色| 3atv一区二区三区| 精品欧美一区二区三区精品久久| 欧美成人福利视频| 中文字幕欧美日韩一区| 一区二区三区在线不卡| 亚洲一区二区三区中文字幕在线| 亚洲午夜久久久久中文字幕久| 午夜欧美在线一二页| 激情综合网av| 欧美视频精品在线观看| 欧美成人vps| 亚洲高清久久久| 国产专区欧美精品| 欧美日韩国产在线播放网站| 国产日本亚洲高清| 中文字幕一区二区三区在线观看 | 国产精品久久久久久户外露出| 亚洲色图欧美激情| 视频一区二区三区中文字幕| 波多野结衣亚洲| 欧美一区二区三区成人| 国产精品福利影院| 国产精品自在欧美一区| 欧美成人bangbros| 国产精品国产三级国产有无不卡| 午夜精品久久久久影视| 成人免费精品视频| 日韩精品最新网址| 亚洲国产aⅴ成人精品无吗| 91色在线porny| 亚洲欧美aⅴ...| 欧美精品 日韩| 欧美日韩精品专区| 亚洲欧美另类图片小说| av不卡在线播放| 日韩理论在线观看| 日本精品一区二区三区四区的功能| 国产欧美一区二区三区在线老狼| av资源网一区| 轻轻草成人在线| 亚洲天堂2016| 精品国产精品网麻豆系列| 91精品1区2区| 国产成人综合在线播放| 亚洲乱码国产乱码精品精的特点 | 99精品视频中文字幕| 日韩成人免费电影| 亚洲精品伦理在线| 亚洲精品一区二区三区四区高清| 色久综合一二码| 粉嫩一区二区三区性色av| 久久久精品国产免大香伊| 久久疯狂做爰流白浆xx| 久久精品人人做| 精品久久人人做人人爽| 欧美疯狂做受xxxx富婆| 欧美亚洲另类激情小说| av不卡一区二区三区| 成人午夜伦理影院| 国产91精品精华液一区二区三区| 国产真实乱偷精品视频免| 免费在线观看日韩欧美| 美女视频黄 久久| 精品中文字幕一区二区小辣椒| 日韩中文字幕一区二区三区| 亚洲综合色噜噜狠狠| 亚洲一区二区三区在线| 午夜成人免费电影| 久久国产尿小便嘘嘘| 精品一区二区三区的国产在线播放| 毛片一区二区三区| 高潮精品一区videoshd| 在线视频你懂得一区二区三区| 国产成人欧美日韩在线电影| 不卡一卡二卡三乱码免费网站| av在线播放一区二区三区| 在线影院国内精品| 日韩欧美一级二级| 1000精品久久久久久久久| 洋洋成人永久网站入口| 久久99国产精品久久99果冻传媒| 国产91精品久久久久久久网曝门| 99精品热视频| 精品久久久三级丝袜| 亚洲免费在线看| 日韩av不卡在线观看| 成人久久18免费网站麻豆| 777色狠狠一区二区三区| 亚洲国产岛国毛片在线| 精品无人码麻豆乱码1区2区| 91视频免费观看| 国产精品乱码妇女bbbb| 国内精品自线一区二区三区视频| 色一情一乱一乱一91av| 精品对白一区国产伦| 亚洲欧美另类小说视频| 蜜臀av性久久久久蜜臀av麻豆| 99久久综合99久久综合网站| 久久综合九色综合97_久久久| 午夜不卡av在线| 91麻豆精品国产91久久久久久| 一区二区三区**美女毛片| 激情综合网天天干| 日韩久久久久久| 久久99精品国产.久久久久 | 91精品国产一区二区| 亚洲与欧洲av电影| 欧美日韩一卡二卡三卡 | 国产精品美女久久久久aⅴ国产馆| 久久99久久99| 国产精品国产三级国产aⅴ原创| 岛国精品在线观看| 亚洲精品视频在线看| 在线观看网站黄不卡| 日本欧美久久久久免费播放网| 欧美日韩一二三区| 亚洲国产aⅴ成人精品无吗| av在线综合网| 亚洲成va人在线观看| 精品粉嫩超白一线天av| 99精品黄色片免费大全| 亚洲高清免费观看| 国产农村妇女毛片精品久久麻豆 | 国产性色一区二区| 日本高清成人免费播放| 激情六月婷婷久久| 亚洲激情中文1区| 日本一区二区在线不卡| 欧美精品欧美精品系列| 国产成人在线视频免费播放| 亚洲免费在线播放| 久久噜噜亚洲综合| 日韩一二三四区| 欧美三级日韩三级国产三级| 99精品欧美一区二区三区小说| 免费成人小视频| 婷婷六月综合亚洲| 图片区日韩欧美亚洲| 国产女人aaa级久久久级| 欧美久久久久中文字幕| 日韩高清在线观看| 亚洲成人自拍偷拍| 日韩中文字幕一区二区三区|