我這里配置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是空閑的
|