STM32—DAC配置

一.DAC介绍

ADC是模数转换器,可以将模拟电压转换位数字信号;DAC是数模转换器,可以将数字信号转换为模拟电压。
STM32F103ZET6内部DAC有2个通道,12位数字输入(也可以配置为8位),可以按要求输出不同的信号波形,其主要特点如下:

  • 2个DAC转换通道
  • 每个通道都有DMA功能
  • 2个通道可以同时转换或者分别转换
  • 输入信号可以是12位或8位
  • 12位输入模式分为:右对齐、左对齐
  • 有同步更新功能
  • 可以生成噪声波形
  • 可以生成三角波形

DAC框图如下:
在这里插入图片描述

二.主要寄存器说明

一般使用DAC情况不多,而且使用也就是单纯输出电压,基本用不到STM32输出一些特殊的波形,所以了解一下基本的寄存器就可以配饰DAC了。

DAC 输出是受 DORx 寄存器直接控制的,但是不能直接往 DORx寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。
比如通道1的12位右对齐数据保持寄存器:
在这里插入图片描述
控制DAC的就是DAC控制寄存器了:

在这里插入图片描述
在这里插入图片描述
这种东西,现在查一下参考手册就可以很快掌握。

三.代码及配置

PA4开始设置为模拟输入是为了防止信号干扰,在使能DAC后,PA4会自动与DAC模拟输出相连,所以不必担心。

/* DAC1  PA4 模拟输入 12位右对齐 参考电压3.3V */
void DAC1_Init( void )
{
	GPIO_InitTypeDef GPIO_InitStruct;
	DAC_InitTypeDef DAC_InitStruct;
	
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
	RCC_APB1PeriphClockCmd( RCC_APB1Periph_DAC, ENABLE );
	
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;//GPIO引脚模式:模拟输入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init( GPIOA, &GPIO_InitStruct );
	GPIO_SetBits( GPIOA, GPIO_Pin_4 );
	
	DAC_InitStruct.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;//只有波形发生时才使用
	DAC_InitStruct.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//不使用输出缓存
	DAC_InitStruct.DAC_Trigger = DAC_Trigger_None;//不触发
	DAC_InitStruct.DAC_WaveGeneration = DAC_WaveGeneration_None;//不使用波形发生
	DAC_Init( DAC_Channel_1, &DAC_InitStruct );
	
	DAC_Cmd( DAC_Channel_1, ENABLE );
	DAC_SetChannel1Data( DAC_Align_12b_R, 0 );
}


/* 参考电压3.3V 12位分辨率:0~4095 vol代表输出电压的100倍:0~330 */
void Set_DAC_Vol( uint16_t vol )
{
	uint16_t x;
	
	x = (uint16_t)4096*(vol/330);
	DAC_SetChannel1Data( DAC_Align_12b_R, x );
}


posted @ 2020-04-30 20:14  Aspirant-GQ  阅读(403)  评论(0)    收藏  举报