二、怎样配置软件来使用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中断;
|