野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13525|回复: 2

dma目标地址不递增

[复制链接]
发表于 2017-6-6 16:12:44 | 显示全部楼层 |阅读模式
10火花
想将adc1的数据用dma放在内存中的数组sendbuff里面,现在SendBuff[0]和ad采样值时刻一致,SendBuff里面其他值为0.dma主要配置如下
[code]DMA_InitStructure.DMA_Channel = chx;  //通道选择
  DMA_InitStructure.DMA_PeripheralBaseAddr = par;//DMA外设地址
  DMA_InitStructure.DMA_Memory0BaseAddr = mar;//DMA 存储器0地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设模式到存储器
//  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//存储器到外设模式
  DMA_InitStructure.DMA_BufferSize = ndtr;//数据传输量
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设非增量模式

回复

使用道具 举报

 楼主| 发表于 2017-6-6 16:19:19 | 显示全部楼层
我擦,我后半段呢
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_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据长度:        16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//存储器数据长度:        16位
//        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据长度:        32位
//        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;//存储器数据长度:        32位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;// 使用循环模式             别改          11111111111111111111111111111111111111111
//  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// 使用普通模式                        
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//高等优先级               
//  DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;         
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存储器突发单次传输
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发单次传输
  DMA_Init(DMA_Streamx, &DMA_InitStructure);//初始化DMA Stream
       
DMA_Cmd(DMA2_Stream0,ENABLE);
主函数
#define SEND_BUF_SIZE 8 //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍.

u16 SendBuff[SEND_BUF_SIZE];        //发送数据缓冲区
         


int main(void)
{
//  u16 tt=0;
        u16 j=0;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);    //初始化延时函数
        uart_init(115200);        //初始化串口波特率为115200
//        LED_Init();                                        //初始化LED
//         LCD_Init();         //初始化LCD接口
//        KEY_Init();
                Adc_Init();         //初始化ADC
        MYDMA_Config(DMA2_Stream0,DMA_Channel_0,(u32)&ADC1->DR,(u32)SendBuff,1);//DMA2,STEAM7,CH4,外设为串口1,存储器为SendBuff,长度为:SEND_BUF_SIZE.111111111111111111111111111

        while(1)
        {
                ADC_SoftwareStartConv(ADC1);//使能ADC的软件转换启动功能
                ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE); //源数据变化时开启DMA传输,不能改
//                ADC_DMACmd(ADC1, ENABLE);
//                MYDMA_Enable(DMA2_Stream0,1);     //开始一次DMA传输!                                         111111111111111111111111111


                if(DMA_GetFlagStatus(DMA2_Stream0,DMA_FLAG_TCIF0)!=RESET)//等待DMA2_Steam7传输完成
                {
                        DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TCIF0);//清除DMA2_Steam7传输完成标志
                        printf("Value%d\r\n",ADC_GetConversionValue(ADC1));
                        printf("j%d\r\n",j);
                        printf("SendBuff%d\r\n",SendBuff[j]);
                        printf("Send0Buff%d\r\n",SendBuff[0]);//11111111111111111111111111111111111111111111111111111111
                        j++;
                        if(j==SEND_BUF_SIZE)
                        {
                                j=0;
                        }       
                }
         }                       
}       
串口助手j0
SendBuff3850
Send0Buff3850
Value3850
j1
SendBuff0
Send0Buff3839
Value3839
j2
SendBuff0
Send0Buff3851
Value3851
j3
SendBuff0
Send0Buff3864
Value3864
j4
SendBuff0
Send0Buff3863
Value3863
j5
SendBuff0
Send0Buff3848
Value3848
j6
SendBuff0
Send0Buff3854
Value3854
j7
SendBuff0
Send0Buff3848
Value3848
j0
SendBuff3854
Send0Buff3854
Value3854
j1
SendBuff0
Send0Buff3852
Value3852
j2
SendBuff0
Send0Buff3835
Value3835
j3
SendBuff0
Send0Buff3839
Value3839

回复

使用道具 举报

 楼主| 发表于 2017-6-7 10:06:45 | 显示全部楼层
这论坛是没人搞学术吗?问题已解决。MYDMA_Config(DMA2_Stream0,DMA_Channel_0,(u32)&ADC1->DR,(u32)SendBuff,1);将数据传输量改大些就好了
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-17 17:51 , Processed in 0.042662 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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