OpenEdv-开源电子网

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

新手提问:STM32用DAC和DMA输出正弦波问题

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2016-6-12
在线时间
0 小时
发表于 2016-6-13 11:20:19 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 铁板上的牛排 于 2016-6-13 11:44 编辑

不知干嘛,输出没反应,不知道哪里没调好,小白,第一次写DAC和DMA,DAC是没问题,但DMA使用不了,看了好久都不知道哪里错了,麻烦大神帮我看看哪里错了?谢谢

DMA程序:

#include "stm32f10x.h"
#include "dac.h"
#include "dma.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"

uc8 sine_tab[100]={
0x7F,0x87,0x8F,0x97,0x9F,0xA6,0xAE,0xB5,0xBC,0xC3,0xCA,0xD0,0xD6,0xDC,0xE1,0xE6
,0xEB,0xEF,0xF2,0xF6,0xF8,0xFA,0xFC,0xFD,0xFE,0xFE,0xFE,0xFD,0xFC,0xFA,0xF8,0xF6
,0xF2,0xEF,0xEB,0xE6,0xE1,0xDC,0xD6,0xD0,0xCA,0xC3,0xBC,0xB5,0xAE,0xA6,0x9F,0x97
,0x8F,0x87,0x7F,0x77,0x6F,0x67,0x5F,0x58,0x50,0x49,0x42,0x3B,0x34,0x2E,0x28,0x22
,0x1D,0x18,0x13,0x0F,0x0C,0x08,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x01,0x02,0x04
,0x06,0x08,0x0C,0x0F,0x13,0x18,0x1D,0x22,0x28,0x2E,0x34,0x3B,0x42,0x49,0x50,0x58
,0x5F,0x67,0x6F,0x77
};

void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    //使能DMA传输
   
    DMA_DeInit(DMA_CHx);   //将DMA的通道1寄存器重设为缺省值
    DMA1_MEM_LEN=cndtr;
    DMA_InitStructure.DMA_PeripheralBaseAddr = cpar;  //DMA外设ADC基地址
    DMA_InitStructure.DMA_MemoryBaseAddr = cmar;  //DMA内存基地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //数据传输方向,从内存读取发送到外设
    DMA_InitStructure.DMA_BufferSize = cndtr;  //DMA通道的DMA缓存的大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址寄存器不变
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址寄存器递增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  //数据宽度为8位
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位
    DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  //工作在正常缓存模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMA通道x没有设置为内存到内存传输
    DMA_Init(DMA_CHx, &DMA_InitStructure);  //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器
         
}
//开启一次DMA传输
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
    DMA_Cmd(DMA_CHx, DISABLE );  //关闭USART1 TX DMA1 所指示的通道      
     DMA_SetCurrDataCounter(DMA1_Channel4,DMA1_MEM_LEN);//DMA通道的DMA缓存的大小
     DMA_Cmd(DMA_CHx, ENABLE);  //使能USART1 TX DMA1 所指示的通道
}      




int main(void)         
{
       u8 aa;      
        Dac1_Init();             //DAC通道1初始化
   
        MYDMA_Config(DMA1_Channel4,(u32)&DAC->DHR8R1,(u32)sine_tab,50);
   
        DAC_DMACmd(DAC_Channel_1,ENABLE);

       MYDMA_Enable(DMA1_Channel4);
   
        
        while(1)
        {
        MYDMA_Enable(DMA1_Channel4);   
        }
}

这样设置无输出,不知这样设置对吗?

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

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2016-6-12
在线时间
0 小时
 楼主| 发表于 2016-6-13 11:38:11 | 显示全部楼层
DAC可以用,但DMA用不了,麻烦看看是啥问题
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2016-6-12
在线时间
0 小时
 楼主| 发表于 2016-6-13 11:39:55 | 显示全部楼层
mini板的STM32芯片里那个通道时DAC的? 例程写DMA1_Channel4,看视频说是DMA1_Channel3
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-6-15 22:08:55 | 显示全部楼层
铁板上的牛排 发表于 2016-6-13 11:39
mini板的STM32芯片里那个通道时DAC的? 例程写DMA1_Channel4,看视频说是DMA1_Channel3

看中文参考手册,上面有写
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

227

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3096
金钱
3096
注册时间
2016-4-15
在线时间
350 小时
发表于 2018-2-1 16:17:23 | 显示全部楼层
你用的定时器几呀?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 09:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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