DAC原理
数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到VREF+。
任一DAC通道引脚上的输出电压满足下面的关系: DAC输出 = VREF x (DOR / 4095)
STM32DAC库函数配置
1.开启PA口和DAC时钟,设置PA4为模拟输入
GPIO_InitTypeDef
GPIO_InitStructure; //开启PA口和DAC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );//使能PA口时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );//使能DAC通道时钟
//设置PA4为模拟输入 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);
2.初始化DAC,设置DAC的工作模式
DAC_InitTypeDef DAC_InitType;
DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能 TEN1=0
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1 输出缓存关闭
DAC_Init(DAC_Channel_1,&DAC_InitType); //初始化 DAC 通道 1
第一个参数 DAC_Trigger 用来设置是否使用触发功能,前面已经讲解过这个的含义,这里我们不是用触发功能,所以值为 DAC_Trigger_None。
第二个参数 DAC_WaveGeneratio 用来设置是否使用波形发生,这里我们前面同样讲解过不使用。所以值为 DAC_WaveGeneration_None。
第三个参数 DAC_LFSRUnmask_TriangleAmplitude 用来设置屏蔽/幅值选择器,这个变量只在使用波形发生器的时候才有用,这里我们设置为 0 即可,值为DAC_LFSRUnmask_Bit0。
第四个参数 DAC_OutputBuffer 是用来设置输出缓存控制位。
3.使能DAC转换通道
DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC通道1
4.设置DAC的输出值
设置DAC的输出值:void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
第一个参数设置对齐方式。可以为:
12位右对齐DAC_Align_12b_R,
12位左对齐DAC_Align_12b_L,
8位右对齐DAC_Align_8b_R方式。
第二个参数就是DAC的输入值了。
读出DAC的数值:uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)