当前位置:首页 > 单片机 > 单片机
[导读]1、简述:12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。特殊功能:噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都

1、简述:

12位数字输入,电压输出,DAC可以配置为8位或12位模式。有2个输出通道。在双DAC模式下,两个通道可以独立地工作。

特殊功能:噪声波形生成,三角波形生成,外部触发转换,双DAC同时或者分别转换;每个通道都有DMA功能;

参考电压:2.4V~ 3.3V

因为一旦使能DAC通道,那么相应的GPIO便自动地连接到DAC转换器,因此,模拟输出前应该设置成模拟输入,目的是避免寄生的干扰和额外的功耗;

2、函数介绍:

(1)缺省函数

DAC_Init();

(2)DAC_Init(DAC_Channel_1,&DAC_InitStructure);初始化函数

DAC_InitTypeDef DAC_InitStructure;

初始化的设置有四个:

?DAC_Trigger:指定所选DAC的触发源,有9个触发源可以选择:

DAC_Trigger_None

DAC_Trigger_T6_TRGO

DAC_Trigger_T8_TRGO

DAC_Trigger_T7_TRGO

DAC_Trigger_T5_TRGO

DAC_Trigger_T2_TRGO

DAC_Trigger_T4_TRGO

DAC_Trigger_Ext_IT9

DAC_Trigger_Software

?DAC_WaveGeneration :指定DAC是否产生噪声波形,三角波或者不产生以上波形

DAC_WaveGeneration_None

DAC_WaveGeneration_Noise

DAC_WaveGeneration_Triangle

?DAC_LFSRUnmask_TriangleAmplitude:如果选择了产生噪声波形或者三角波,那么这里可以选择噪声波形的LFSRUnMask屏蔽位或者三角波的最大幅度

?DAC_OutputBuffer:指定输出是否要缓冲一下

DAC_OutputBuffer_Enable

DAC_OutputBuffer_Disable

(3)DAC_Cmd(DAC_Channel_1,EANBLE); DAC通道使能函数

(4)DAC_DMACmd(DAC_Channel_1,ENABLE);如果要用到DMA到DAC那么就要使能哪个DAC通道

(5)DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);软件触发使能函数,一般单通道时候使用

(6)DAC_DualSoftwareTriggerCmd(ENABLE);如果要同时控制两个DAC通道,那么就要使能此函数

(7)DAC_Wave GenerationCmd(DAC_Channel_1, DAC_Wave_Noise, ENABLE);波形发生使能函数,可以选择哪个通道以及噪声或者三角波波形

(8)DAC_SetChannel1Data(DAC_Align_12b_R, 0x500);

选择通道1的数据位数和对齐方式,以及具体输出值。三种对齐数据位方式:

DAC_Align_12b_R12位右对齐,数值小于4096

DAC_Align_12b_L12位左对齐,数值小于0XxFFF0

DAC_Align_8b_R8位右对齐,数值小于256

(9)DAC_SetChannel2Data(DAC_Align_12b_L, 0x8880);同理(8)

(10)DAC_SetDualChannelData(DAC_Align_8b_R, 0x40, 0xF1);同理(8)

(11)u16 DataValue;

DataValue = DAC_GetDataOutputValue(DAC_Channel_1);得到当前DAC输出的值

3、具体应用:

3.1产生一个直流电压:

GPIOA_04是DAC1 , GPIOA_05是DAC2

1、设置GPIOA_04或05为模拟输入;

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure)

2、开启GPIOA和DAC的时钟。注意GPIOA的时钟是在APB2,而DAC的时钟则是在APB1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

3、配置DAC输出直流电压

DAC_InitTypeDef DAC_InitStructure;

DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;//选择DAC的触发输出,当产生波形时可用定时器触发

DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;

DAC_Init(DAC_Channel_1, &DAC_InitStructure);

DAC_Cmd(DAC_Channel_1, ENABLE);

DAC_SetChannel1Data(DAC_Align_12b_R,4095);


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭