1.DAC模块
1.数模转换功能
2.可以配置为8位和12位模式(8位右对齐,12位左对齐,12位右对齐)
3.DAC模块有两个单独的控制器,每个通道有着单独的转换器,可以独立转换,也可以同时转换
4.可以实现噪声波形和三角波形的生成
5.每个通道有着DMA功能
6.图示:
PS:左上方为一些触发的条件,左下方为一些数字电源(VDDA,VSSA)
Vref+为参考电压,DAC_OUT_x为DAC的输出通道,(2.4v<Vref<VDDA)
数据并不是直接传入DORx的,需要先传入DHRx(如果没有选择硬件触发(TENx=0),在一个时间周期后传入DORx),同时,又经过Tsetting(大约3us)后传入DHRx,如果选择硬件触发(TENx=1),则在3个时间周期后传入DORx
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); //初始化数据格式
}
注意设置数据对齐的方式