本帖最后由 yzzly 于 2011-7-30 14:35 编辑
#define DAC1_CR_DMAEN 0 //0:关闭DAC通道1 DMA模式;1:使能DAC通道1 DMA模式
#define DAC1_CR_MAMP 0 //DAC通道1屏蔽/幅值选择器
#define DAC1_CR_WAVE 0 //0:关闭波形生成;1:使能噪声发生器;2:使能三角波发生器
#define DAC1_CR_TSEL 7 //DAC1触发选择.0--T6 TRGO,1--,2--T7 TRGO,3--T5 TRGO,
// 4--T2 TRGO,5--T4 TRGO,6--EXITL9,7--软件
#define DAC1_CR_TEN 0 //0:关闭DAC触发,写入的数据在1个APB1时钟后开始转换
//1:使能DAC触发,写入的数据在3个APB1时钟周开始转换
//如果选择软件触发,写入的数据在1个APB1时钟后开始转换
#define DAC1_CR_BOFF 0 //0:使能DAC输出缓冲;1:禁止DAC输出缓冲
#define DAC1_CR_EN 1 //使能DAC
#define DAC1_SWR_SWT 1 //0:关闭DAC软件触发;1:使能DAC软件触发
void DAC_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能端口A时钟
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure); //推挽输出
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE); //使能DAC时钟
DAC->CR |= DAC1_CR_DMAEN << 12;
DAC->CR |= DAC1_CR_MAMP << 8;
DAC->CR |= DAC1_CR_WAVE << 6;
DAC->CR |= DAC1_CR_TSEL << 3;
DAC->CR |= DAC1_CR_TEN << 2;
DAC->CR |= DAC1_CR_BOFF << 1;
DAC->CR |= DAC1_CR_EN << 0;
}
DAC->DHR12R1 = DAC1_Out_Range*4095/DAC1_Vref; //所谓软件触发就是向数据寄存器写数据就立即转换 |