二、怎样配置软件来使用DMA 把数据传到串口发送?
(1)配置dma
/**************************************************************************
*函数名称: Dma_Init
*功能描述: 利用DMA 把内存的数据传输到串口发送达到高速传输的目的
*
*输入参数:无
*返回值 :无
*其他说明:无
*当前版本:v1.0
*作者 :尹宣
*完成时间:2013年12月1日
*修改日期 版本号 修改人 修改内容
*-----------------------------------------------------------------
*
******************************************************************/
#define UART_RX_LEN 5
u8 Uart_Send_Buffer[UART_RX_LEN] = {0x12,0x34,0x56,0x78,0x90};
u8 i=0;
u8 Flag_Uart_Send=0;
void Dma_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* DMA channel6configuration */
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR); //外设地址
DMA_InitStructure.DMA_MemoryBaseAddr =(u32)Uart_Send_Buffer;
DMA_InitStructure.DMA_DIR =DMA_DIR_PeripheralDST; //外设作为目的地址 //DMA_DIR_PeripheralSRC; //外设作为DMA的源端
DMA_InitStructure.DMA_BufferSize =5; //BufferSize; //传输大小
DMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Disable; //外设递增模式禁止 DMA_PeripheralInc_Enable; //外设地址增加
DMA_InitStructure.DMA_MemoryInc =DMA_MemoryInc_Enable; //内存地址自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //传输方式:字节 DMA_PeripheralDataSize_Word; //字(32位)
DMA_InitStructure.DMA_MemoryDataSize =DMA_PeripheralDataSize_Byte; //内存存储方式:字节 DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; //DMA_Mode_Normal 正常模式,只传送一次; DMA_Mode_Circular:循环模式,不停的传送;
DMA_InitStructure.DMA_Priority =DMA_Priority_High;
DMA_InitStructure.DMA_M2M =DMA_M2M_Disable; //DMA_M2M_Enable;
DMA_Init(DMA1_Channel4,&DMA_InitStructure);
/* Enable DMA Channel4Transfer Complete interrupt */
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC, ENABLE);
//
// USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE); //串口接收器DMA
//采用DMA方式发送
USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE);
//启动串口
USART_Cmd(USART1,ENABLE);
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC, ENABLE);
传输完成则进入DMA1_Channel4中断;
|