miniStm32的DMA内存到内存传输如何设置啊?

2019-08-14 08:14发布

内存到内存的DMA通道可以随便选择吗?我用串口传输数组只能传输第一个数据,内存和外设地址都设置为递增也不行。是波特率的问题吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
广寒宫
2019-08-15 02:49
回复【4楼】正点原子:
---------------------------------
u8 TEXT_TO_SEND[]={0x58,0xfe,0x73,0xab};
u8 ADDATA[]={0};
int main(void)
{
......
DMA_init((u32)TEXT_TO_SEND,(u32)ADDATA);//从TEXT_TO_SEND拷贝到ADDATA,数组
MYDMA_Enable();
 if(DMA_GetFlagStatus(DMA1_FLAG_TC4) == SET)//等待通道4传输完成
       {
 DMA_ClearFlag(DMA1_FLAG_TC4);  //清除发送完成标志   
       } 
......
}
void DMA_init(u32 capr,u32 dat)//capr--外设地址;dat--DMA内存基地址

        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输
delay_ms(2);
DMA_DeInit(DMA1_Channel4); 
DMA_InitStructure.DMA_PeripheralBaseAddr =capr;//外设地址 
DMA_InitStructure.DMA_MemoryBaseAddr = dat;  //DMA内存基地址
DMA_InitStructure.DMA_DIR =DMA_DIR_PeripheralSRC ; //外设作为数据目的地DMA_DIR_PeripheralDST
        DMA_InitStructure.DMA_BufferSize =5200;//DMA缓存大小 
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;  
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通道优先级为高中    
DMA_InitStructure.DMA_M2M =DMA_M2M_Enable;xn--dma-f88d44bc7ga332rba9843g21fo16avokzxbpya
DMA_Init(DMA1_Channel4, &DMA_InitStructure);
}
void MYDMA_Enable(void)

DMA_Cmd(DMA1_Channel4, DISABLE );  //关闭USART1 TX DMA1 所指示的通道       
    DMA_InitStructure.DMA_BufferSize =4;
DMA_Init(DMA1_Channel4, &DMA_InitStructure);
  DMA_Cmd(DMA1_Channel4, ENABLE);  //使能 
}
//就是这样设置的,但用串口接收数据是这样的”FE 73 AB AB FE 73 AB AB FE 73 AB AB FE 73 AB AB“,没有了第一个数据“58”

一周热门 更多>