我这里配置DMA 用USART传输数据
void DMA_Configuration() { DMA_InitTypeDef DMA_InitStructure;//定义设置DMA的结构体 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//使能DMA1的时钟 DMA_InitStructure.DMA_PeripheralBaseAddr= (unsigned int)&USART1->DR;//取USART->DR的地址为传输目的地 DMA_InitStructure.DMA_MemoryBaseAddr= (u32)a;//取a数组的地址为起始地 DMA_InitStructure.DMA_DIR= DMA_DIR_PeripheralDST;//设置外设作为数据传输的目的地 DMA_InitStructure.DMA_BufferSize= 40;//设置DMA缓存 DMA_InitStructure.DMA_PeripheralInc= DMA_PeripheralInc_Disable;//设置外设地址不增 DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Enable;//设置内存地址自增 DMA_InitStructure.DMA_PeripheralDataSize= DMA_PeripheralDataSize_Byte;//设置外设的传输数据宽度 这里为1个字节 DMA_InitStructure.DMA_MemoryDataSize= DMA_MemoryDataSize_Byte; //设置内存的数据宽度为 1个字节 DMA_InitStructure.DMA_Mode= DMA_Mode_Circular; //设置DMA为循环传输模式 DMA_InitStructure.DMA_Priority= DMA_Priority_Medium;// DMA_InitStructure.DMA_M2M= DMA_M2M_Disable;//设置DMA通道的优先级 DMA_Init(DMA1_Channel4,&DMA_InitStructure);//设置使用DMA1的第四通道为数据传输通道 DMA_Cmd (DMA1_Channel4,ENABLE); //使能DMA } USART1也要设置过; 调用 USART_DMACmd(USART1,USART_DMAReq_Tx, ENABLE); 函数即可从发送数据这是CPU是空闲的
|