OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3475|回复: 13

F767 DAC+DMA输出1Khz正弦波, 为什么输出不了求帮助指点,不胜感激

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
发表于 2019-8-8 11:25:57 | 显示全部楼层 |阅读模式
1金钱

@]CRVQF94L0EY%6WM1%X3RA.jpg
RCWF7IL4O%8HEQ5B[REPDPB.png

实验24 DMA实验.zip

19.36 MB, 下载次数: 51

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-4-24
在线时间
4 小时
发表于 2019-8-8 18:36:09 | 显示全部楼层

您好,想请教一下

如果想测量1.5V~1.65V的电压
vref+接1.65v,GND接1.5V可行吗?

GND接1.5V会不会影响其他模块?
回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2019-8-8 20:46:36 | 显示全部楼层
兄弟,怎么没看到你配置DAC?看图片你好像只配置了定时器和DMA吧,这种生成正旋波的帖子,论坛很多,你可以搜索一下,看看别人怎么配置的。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
 楼主| 发表于 2019-8-8 21:42:52 | 显示全部楼层
13372533333 发表于 2019-8-8 20:46
兄弟,怎么没看到你配置DAC?看图片你好像只配置了定时器和DMA吧,这种生成正旋波的帖子,论坛很多,你可以 ...

配置了,图片选了4张 貌似只能上传2张。。 我也很尴尬。 下面有完整工程,可否打开帮看一下。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
 楼主| 发表于 2019-8-8 21:46:42 | 显示全部楼层
剩下的两张图,我总感觉我缺少了啥,麻烦大家指出我漏了啥或错在哪里
RCWF7IL4O%8HEQ5B[REPDPB.png
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
 楼主| 发表于 2019-8-8 22:21:14 | 显示全部楼层

没贴出来的DAC部分;大部分直接在例程上改的配置

DAC_HandleTypeDef DAC1_Handler;   //DAC¾ä±ú
void DAC1_Init(void)
{
    DAC_ChannelConfTypeDef DACCH1_Config;
    DAC1_Handler.Instance=DAC;
    HAL_DAC_Init(&DAC1_Handler);                 //3õê¼»ˉDAC

    DACCH1_Config.DAC_Trigger=DAC_TRIGGER_T2_TRGO;                             //2»ê1óÃ′¥·¢1|Äü
    DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;              //DAC1êä3ö»o3å1رÕ
    HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);  //DACí¨μà1ÅäÖÃ
    HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1);  //¿aÆôDACí¨μà1

}
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
{      
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_DAC_CLK_ENABLE();             //ê1ÄüDACê±Öó
    __HAL_RCC_GPIOA_CLK_ENABLE();                        //¿aÆôGPIOAê±Öó
       
    GPIO_Initure.Pin=GPIO_PIN_4;            //PA4
    GPIO_Initure.Mode=GPIO_MODE_ANALOG;     //Ä£Äa
    GPIO_Initure.Pull=GPIO_NOPULL;          //2»′øéÏÏÂà-
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}

void DAC1_Set_Vol(u16 vol)
{
        double temp=vol;
        temp/=1000;
        temp=temp*4096/3.3;
    HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);     //12λóò¶ÔÆëêy¾Y¸ñê½éèÖÃDACÖμ
}



回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
 楼主| 发表于 2019-8-9 08:59:57 | 显示全部楼层
*DAC配置部分*
DAC_HandleTypeDef DAC1_Handler;//DAC¾ä±ú
void DAC1_Init(void)
{
    DAC_ChannelConfTypeDef DACCH1_Config;

    DAC1_Handler.Instance=DAC;
    HAL_DAC_Init(&DAC1_Handler);               

    DACCH1_Config.DAC_Trigger=DAC_TRIGGER_T2_TRGO;                                
    DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;               
    HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);

    HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1);  //¿aÆôDACí¨μà1
}

void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
{      
    GPIO_InitTypeDef GPIO_Initure;
    __HAL_RCC_DAC_CLK_ENABLE();            
    __HAL_RCC_GPIOA_CLK_ENABLE();               
       
    GPIO_Initure.Pin=GPIO_PIN_4;                  
    GPIO_Initure.Mode=GPIO_MODE_ANALOG;     
    GPIO_Initure.Pull=GPIO_NOPULL;               
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
}

//éèÖÃí¨μà1êä3öμçÑ1
//vol:0~3300,′ú±í0~3.3V
void DAC1_Set_Vol(u16 vol)
{
        double temp=vol;
        temp/=1000;
        temp=temp*4096/3.3;
    HAL_DAC_SetValue(&DAC1_Handler,DAC_CHANNEL_1,DAC_ALIGN_12B_R,temp);
}
*定时器部分*
TIM_HandleTypeDef TIM2_Handler;      //¶¨ê±Æ÷¾ä±ú
//¶¨ê±Æ÷òç3öê±¼ä¼ÆËã·½·¨:Tout=((arr+1)*(psc+1))/Ft us.  10*108/108M=0.00001         0.001   1/0.001=1000
void TIM2_Init(u16 arr,u16 psc)
{  
    TIM2_Handler.Instance=TIM2;                       
    TIM2_Handler.Init.Prescaler=psc;                     
    TIM2_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;   
    TIM2_Handler.Init.Period=arr;                                                  
    TIM2_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;        
    HAL_TIM_Base_Init(&TIM2_Handler);
    HAL_TIM_Base_Start_IT(&TIM2_Handler);   
    __HAL_TIM_URS_ENABLE(&TIM2_Handler);       
       
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM2)
        {
                __HAL_RCC_TIM2_CLK_ENABLE();           
                HAL_NVIC_SetPriority(TIM2_IRQn,1,3);   
                HAL_NVIC_EnableIRQ(TIM2_IRQn);        
        }  
}

void TIM2_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM2_Handler);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM2_Handler))
    {
        LED1_Toggle;        //LED0·′×a
    }
}

*DMA配置部分*
DMA_HandleTypeDef  DAC1TxDMA_Handler;     
extern DAC_HandleTypeDef DAC1_Handler;

void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx)
{
        if((u32)DMA_Streamx>(u32)DMA2)
        {
        __HAL_RCC_DMA2_CLK_ENABLE();
        }else
        {
        __HAL_RCC_DMA1_CLK_ENABLE();
        }

    __HAL_LINKDMA(&DAC1_Handler,DMA_Handle1,DAC1TxDMA_Handler);   

    //Tx DMAÅäÖÃ
    DAC1TxDMA_Handler.Instance=DMA_Streamx;                           
    DAC1TxDMA_Handler.Init.Channel=chx;                              
    DAC1TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH;         
    DAC1TxDMA_Handler.Init.PeriphInc=DMA_PINC_DISABLE;                 
    DAC1TxDMA_Handler.Init.MemInc=DMA_MINC_ENABLE;                     
    DAC1TxDMA_Handler.Init.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD;   
                DAC1TxDMA_Handler.Init.MemDataAlignment=DMA_MDATAALIGN_HALFWORD;      
    DAC1TxDMA_Handler.Init.Mode=DMA_CIRCULAR;                           
                DAC1TxDMA_Handler.Init.Priority=DMA_PRIORITY_MEDIUM;              
    DAC1TxDMA_Handler.Init.FIFOMode=DMA_FIFOMODE_DISABLE;              
    DAC1TxDMA_Handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;      
    DAC1TxDMA_Handler.Init.MemBurst=DMA_MBURST_SINGLE;                 
    DAC1TxDMA_Handler.Init.PeriphBurst=DMA_PBURST_SINGLE;            

    HAL_DMA_DeInit(&DAC1TxDMA_Handler);   
    HAL_DMA_Init(&DAC1TxDMA_Handler);
}

*main部分*
#define DAC_SIN_SIZE    100         //·¢Ëíêy¾Y3¤¶è,×îoÃμèóúsizeof(TEXT_TO_SEND)+2μÄÕûêy±¶.

u32 DAC_SIN_BUF[DAC_SIN_SIZE];  //·¢Ëíêy¾Y»o3åÇø

#define PI 3.1415962

extern DAC_HandleTypeDef DAC1_Handler;            //DAC??
extern DMA_HandleTypeDef DAC1TxDMA_Handler;      //DMA??
extern TIM_HandleTypeDef TIM2_Handler;            //?????

//2úéúÕyÏò2¨oˉDòáD£¬¸ù¾YDAC_SIN_SIZEéú3é¡£
void dac_creat_sin_buf(void)
{
    u8 i;
    float inc=2*PI/DAC_SIN_SIZE;        //¼ÆËãÔöá¿£¨ò»¸öÖüÆúDAC_SIN_BUF¸öμ㣩
    float outdata=0;
    for(i=0;i<DAC_SIN_SIZE;i++)
    {
        outdata=2047*(1+sin(inc*i));    //&#188;&#198;&#203;&#227;ò&#212;dots&#184;&#246;μ&#227;&#206;a&#214;ü&#198;úμ&#196;&#195;&#191;&#184;&#246;μ&#227;μ&#196;&#214;μ£&#172;·&#197;′ó2048±&#182;£&#172;2¢&#198;&#171;ò&#198;μ&#189;&#213;yêy&#199;&#248;óò&#161;£
        printf("%f\r\n",outdata);
        DAC_SIN_BUF=outdata;
    }  
}


int main(void)
{
        u16 i=0;
    Cache_Enable();               
    HAL_Init();                                        
    Stm32_Clock_Init(432,25,2,9);   
    delay_init(216);               
        uart_init(115200);                     
    LED_Init();                     
    KEY_Init();               
    SDRAM_Init();                  
    LCD_Init();                    
                TIM2_Init(9,108-1);  // ò&#231;3&#246;ê±&#188;&#228;*êy&#190;Y&#184;&#246;êy=&#213;y&#207;ò2¨&#198;μ&#194;ê&#161;£ ò&#231;3&#246;ê±&#188;&#228;=(arr+1)*(psc+1)/&#182;¨ê±&#198;÷ê±&#214;ó
    dac_creat_sin_buf();
                DAC1_Init();
    MYDMA_Config(DMA1_Stream5,DMA_CHANNEL_7);
    POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");       
        LCD_ShowString(30,70,200,16,16,"DMA TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2016/1/24");         
        LCD_ShowString(30,130,200,16,16,"KEY0:Start");         
          
        POINT_COLOR=BLUE;          
        HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1, DAC_SIN_BUF, DAC_SIN_SIZE, DAC_ALIGN_12B_R);
       while(1)
        {
                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED0_Toggle;//ìáê&#190;&#207;μí3&#213;y&#212;ú&#212;&#203;DD       
                        i=0;
                }                  
        }
}




回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2019-8-9 13:16:59 | 显示全部楼层
本帖最后由 13372533333 于 2019-8-9 13:19 编辑

你这个DMA传输数据,只配置内存到外设,没有把外设地址加进去吧,数据都输出不到DAC,怎么可能会有波形出来。
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-8-7
在线时间
8 小时
 楼主| 发表于 2019-8-9 18:59:27 | 显示全部楼层
13372533333 发表于 2019-8-9 13:16
你这个DMA传输数据,只配置内存到外设,没有把外设地址加进去吧,数据都输出不到DAC,怎么可能会有波形出来 ...

        HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1, DAC_SIN_BUF, DAC_SIN_SIZE, DAC_ALIGN_12B_R);   是这里吗?   或者应该怎么设置?
回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2019-8-12 08:04:23 | 显示全部楼层
mumumumu 发表于 2019-8-9 18:59
HAL_DAC_Start_DMA(&DAC1_Handler,DAC_CHANNEL_1, DAC_SIN_BUF, DAC_SIN_SIZE, DAC_ALIGN_12B_R);   是 ...

        DMA_DeInit(DMA1_Stream5);
        DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
        DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40007408;
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&sinTable;
        DMA_InitStructure.DMA_BufferSize = tableSize;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;
        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);
回复

使用道具 举报

59

主题

196

帖子

0

精华

高级会员

Rank: 4

积分
770
金钱
770
注册时间
2018-5-3
在线时间
192 小时
发表于 2019-8-12 08:04:49 | 显示全部楼层
        DMA_DeInit(DMA1_Stream5);
        DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
        DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40007408;
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&sinTable;
        DMA_InitStructure.DMA_BufferSize = tableSize;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;
        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);
回复

使用道具 举报

0

主题

131

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2019-7-1
在线时间
6 小时
发表于 2019-8-12 13:40:41 | 显示全部楼层
感谢楼主分享
IIS7站长  http://www.iis7.com/
回复

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-28
在线时间
50 小时
发表于 2019-12-2 15:11:38 | 显示全部楼层
13372533333 发表于 2019-8-12 08:04
DMA_DeInit(DMA1_Stream5);
        DMA_InitStructure.DMA_Channel = DMA_Channel_7;  
        DMA_InitStructure.DM ...

你这个怕不是F767吧。。。
回复

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-28
在线时间
50 小时
发表于 2019-12-3 15:54:57 | 显示全部楼层
大佬 你解决了吗 我也出现了这种问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 11:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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