STM32 DAC简单介绍

1.DAC模块

1.数模转换功能

2.可以配置为8位和12位模式(8位右对齐,12位左对齐,12位右对齐)

3.DAC模块有两个单独的控制器,每个通道有着单独的转换器,可以独立转换,也可以同时转换

4.可以实现噪声波形和三角波形的生成

5.每个通道有着DMA功能

6.图示:

STM32 DAC简单介绍_第1张图片


PS:左上方为一些触发的条件,左下方为一些数字电源(VDDA,VSSA)

Vref+为参考电压,DAC_OUT_x为DAC的输出通道,(2.4v

数据并不是直接传入DORx的,需要先传入DHRx(如果没有选择硬件触发(TENx=0),在一个时间周期后传入DORx),同时,又经过Tsetting(大约3us)后传入DHRx,如果选择硬件触发(TENx=1),则在3个时间周期后传入DORx

STM32 DAC简单介绍_第2张图片


2.细节部分

1.DAC的输出电压 

DAC输出=(Vref)x(DOR/4095)

2.DAC的输出缓存

虽然可以提高输出能力,但是达不到输出为0的效果,所以基本不用

3.配置步骤

1.开启GPIO口的时钟,设置GPIO口

2.使能DAC的时钟

3.初始化DAC

4.使能DAC的转化通道

5.设置输出值

PS:

typedef struct {  

uint32_t DAC_Trigger;  //触发方式

uint32_t DAC_WaveGeneration;  //是否形成波形

uint32_t DAC_LFSRUnmask_TriangleAmplitude;   //屏蔽/幅值选择器(在选择波形后使用)

uint32_t DAC_OutputBuffer;   //输出缓存(一般不用)

}

DAC_InitTypeDef; 

GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
	DAC_InitTypeDef DAC_InitType;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	  //使能PORTA通道时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );	  //使能DAC通道时钟 

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 // 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //模拟输入
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_4)	;//PA.4 输出高
	DAC_InitType.DAC_Trigger=DAC_Trigger_None;//无触发功能
	DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//无波形发生
	DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//作为屏蔽/幅值选择器,在无波形时,不使用
	DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//一般不使用输出缓存
	DAC_Init(DAC_Channel_1,&DAC_InitType);//初始化DAC通道1
	DAC_Cmd(DAC_Channel_1,ENABLE);//通道使能
	DAC_SetChannel1Data(DAC_Align_12b_R,0);	//初始化数据格式
}

设置电压值(vol*4096/3.3)

void Dac1_Set_Vol(u16 vol)
{
	float temp=vol;
	temp/=1000;
	temp=temp*4096/3.3;//公式
	DAC_SetChannel1Data(DAC_Align_12b_R,0);	//初始化数据格式
}

注意设置数据对齐的方式


你可能感兴趣的:(STM32 DAC简单介绍)