STM32学习笔记-—— DAC功能学习

1、一般用途

 STM32的一个输出外设,使用于驱动一些外围器件的驱动、音频信号的采集和还原等,对于我来说,

嗯,产生一个可控可量化的模拟电压,或者是搞个小小的信号发生器实验。

一般来说,都是有图就先看图,根据STM32使用手册,单个DAC通道如下:
STM32学习笔记-—— DAC功能学习_第1张图片
3、库函数成员包括:

// STM32F10x_StdPeriph_Lib_V3.5.0
typedef struct
{
  uint32_t DAC_Trigger;                      /*!< Specifies the external trigger for the selected DAC channel.
                                                  This parameter can be a value of @ref DAC_trigger_selection */

  uint32_t DAC_WaveGeneration;               /*!< Specifies whether DAC channel noise waves or triangle waves
                                                  are generated, or whether no wave is generated.
                                                  This parameter can be a value of @ref DAC_wave_generation */

  uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation or
                                                  the maximum amplitude triangle generation for the DAC channel. 
                                                  This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */

  uint32_t DAC_OutputBuffer;                 /*!< Specifies whether the DAC channel output buffer is enabled or disabled.
                                                  This parameter can be a value of @ref DAC_output_buffer */
}DAC_InitTypeDef;

DAC的一般配置:

static void DAC_DMA_Config(void)
{	
	
  DAC_InitTypeDef  DAC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
 //这里使用了TIM2作为触发源,根据需要查找固件库DAC_trigger_selection另行配置
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;						
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;	//不使用波形发生器
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;   //不使用DAC输出缓冲	
 
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
  DAC_Init(DAC_Channel_2, &DAC_InitStructure);
  DAC_Cmd(DAC_Channel_1, ENABLE);
  DAC_Cmd(DAC_Channel_2, ENABLE);

  DAC_DMACmd(DAC_Channel_2, ENABLE);
}

配置相对来说较为简单,使用过程中一般需要结合具体的IO口和定时器使用,才能输出自己需要的波形。
另外,需要注意的是:

1、DAC输出=(Vref)x(DOR/4095) :Vref为基准定压。
2、关于STM32的DAC通道输出缓存控制位:手册并没有解释这个输出缓存实现原理,这里我们一般不需要缓存即可。STM32的这个输出缓存使能虽然使输出能力强,但却会导致输出实际电压无法到0V,不信就自己试一下,至于为啥,估计是太懒了。
3、由框图可知:DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往DORx 寄存器(可读)写入数据,却不能直接控制,至于为啥,估计也是因为懒。我们需要通过 DHRx 间接的传给 DORx 寄存器,就可以实现对 DAC 输出的控制了。

由于是开始学习STM32,不足之处,还望赐教!

你可能感兴趣的:(STM32)