硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5446|回复: 2
收起左侧

[有问必答] dac 输出双路正弦波问题

[复制链接]

22

主题

24

回帖

90

积分

初级会员

积分
90
发表于 2017-11-10 11:10:31 | 显示全部楼层 |阅读模式
void DAC_GPIOConfig(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    /*  使能引脚时钟 */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
   
    /* DAC通道1输出引脚配置(PA.4) DAC通道2输出引脚配置(PA.5) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA, &GPIO_InitStructure);   
}

/*
*********************************************************************************************************
*    函 数 名: DAC_Ch12_SineWaveConfig
*    功能说明: DAC通道1正弦波输出
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
void DAC_Ch12_SineWaveConfig(void)
{
    DAC_InitTypeDef  DAC_InitStructure;
    DMA_InitTypeDef DMA_InitStructure;
      
    /* DAC 外设时钟使能 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
   
    /* DMA1 时钟使能 */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
     
    /* DAC通道1配置 */
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;//DAC_OutputBuffer_Enable;
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);
    DAC_Init(DAC_Channel_2, &DAC_InitStructure);
   
    /* DMA1_Stream5 通道7配置 **************************************/  
    DMA_DeInit(DMA1_Stream5);
    DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
    DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_ADDRESS;
    DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Sine12bit;
    DMA_InitStructure.DMA_BufferSize = 32;
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;   
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;                    
    DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;  
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    DMA_Init(DMA1_Stream5, &DMA_InitStructure);   

    /* 使能 DMA1_Stream5 */
    DMA_Cmd(DMA1_Stream5, ENABLE);

    /* 使能DAC通道 */
    DAC_Cmd(DAC_Channel_1, ENABLE);
        DAC_Cmd(DAC_Channel_2, ENABLE);
    /* 设置DAC双通道 DHR12RD 寄存器 */
    DAC_SetDualChannelData(DAC_Align_12b_R, 0, 0);
    /* 使能DAC的DMA通道 */
    DAC_DMACmd(DAC_Channel_1, ENABLE);   
    DAC_DMACmd(DAC_Channel_2, ENABLE);   
}
我按例程改的这个程序有问题吗?
现在只有ch1有输出ch2没有波形输出,请给指点一下?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2017-11-10 11:58:19 | 显示全部楼层
每个DAC都需要一个单独的一个DMA Stream。下载我们V5开发板出厂程序里面的bsp_dac_wave.c文件,API函数做的比较全面,你可以使用
1.jpg
回复

使用道具 举报

22

主题

24

回帖

90

积分

初级会员

积分
90
 楼主| 发表于 2017-11-10 14:31:28 | 显示全部楼层
谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 03:59 , Processed in 0.040170 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表