AT32的DAC有两个独立通道,每个通道可以分别产生稳定电平,三角波,模拟噪声三种输出波形。这里以三角波举例: 1)使能DAC对应时钟,对应GPIO时钟: RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_DAC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA, ENABLE); 2)配置DAC对应GPIO口为模拟模式: GPIO_InitStructure.GPIO_Pins = GPIO_Pins_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_ANALOG; GPIO_Init(GPIOA, &GPIO_InitStructure); 3)DAC输出配置: DAC_InitStructure.DAC_Trigger =DAC_Trigger_Software; //触发源选择—软件触发 DAC_InitStructure.DAC_WaveGeneration =DAC_WaveGeneration_Triangle; //波形选择—三角波 DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude= DAC_TriangleAmp_2047; //三角波幅度/噪声发生器屏蔽位选择--2047 DAC_InitStructure.DAC_OutputBuffer =DAC_OutputBuffer_Enable; //输出缓存选择—使能输出缓存可以减少输出阻抗,无需外部运放即可直接驱动外部负载。 DAC_Init(DAC_Channel_1,&DAC_InitStructure); 4)DAC精度、左/右对齐选择,基值设定: DAC_SetChannel1Data(DAC_Align_12b_Left, 2047); //12bit精度,左对齐,基值这里设置2047(1/2Vref) 5)DAC通道使能 DAC_Ctrl(DAC_Channel_1, ENABLE); 6)触发转换: DAC->SWTRG |= 0x1;//每触发一次,DAC输出+1。在这个例子里,第一次触发DAC输出电平Vref*(基值+0)/4095,第二次触发DAC输出电平Vref*(基值+1)/4095… 因此输出三角波斜率可以通过触发时间间隔调整。
|