关于DMA从存储器到外设的问题

2019-07-20 02:36发布

main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "beep.h"
#include "key.h"
#include "dma1.h"

//ALIENTEK 探索者STM32F407开发板 实验4
//串口通信实验 -库函数版本
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com
//广州市星翼电子科技有限公司  
//作者:正点原子 @ALIENTEK
uint8_t sendBUFF[5000];
int main(void)
{
uint16_t i;
uart_init(115200);
LED_Init();

for(i=0;i<5000;i++)
{
  sendBUFF='A';
}
DMA_M_P_Init(DMA2_Stream7,DMA_Channel_4,(uint32_t)&USART1->DR,(uint32_t)sendBUFF,(uint16_t)5000);
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
DMA_Cmd(DMA2_Stream7,ENABLE);
while(1)
{
  LED0=0;
  LED1=0;
}
}

dma1.h
#include "sys.h"
#include "dma1.h"
#include "usart.h"

void DMA_M_P_Init(DMA_Stream_TypeDef *DMA_Stream_x,u32 chx,u32 par,uint32_t mar,u16 ndtr)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
DMA_DeInit(DMA_Stream_x);
while(DMA_GetCurrDataCounter(DMA_Stream_x)!=DISABLE)
{}
//DMA初始化
/*数据数目*/
DMA_InitStructure.DMA_BufferSize=ndtr;
/*DMA通道选择*/
DMA_InitStructure.DMA_Channel=chx;
/*DMA数据流通道选择*/
DMA_InitStructure.DMA_DIR=DMA_DIR_MemoryToPeripheral;
/*使用FIFO模式*/
DMA_InitStructure.DMA_FIFOMode=DMA_FIFOMode_Enable;
DMA_InitStructure.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;
/*源数据地址*/
DMA_InitStructure.DMA_Memory0BaseAddr=mar;
  
DMA_InitStructure.DMA_MemoryBurst=DMA_MemoryBurst_Single;
/*存储器数据长度,一个字节*/
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
/*存储器增量模式*/
DMA_InitStructure.DMA_MemoryInc=DMA_PeripheralInc_Enable;
/*使用普通模式*/
DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;
/*外设地址*/
DMA_InitStructure.DMA_PeripheralBaseAddr=par;
/*外设突发单次传输*/
DMA_InitStructure.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;
/*外设数据长度32位,一个字节*/
DMA_InitStructure.DMA_PeripheralDataSize=DMA_MemoryDataSize_Word;
/*外设增量模式*/
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
/*高等优先级,无所谓啦*/
DMA_InitStructure.DMA_Priority=DMA_Priority_High;
DMA_Init(DMA2_Stream7,&DMA_InitStructure);
/*清除DMA数据流传输完成标志位*/
DMA_ClearFlag(DMA2_Stream7,DMA_FLAG_TCIF0);

}


我是想DMA传到串口之后应该有5000个A输出的,可是每次只有3的A输出,原子哥,这是为什么呢?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。