硬件平台:STM32F407ZET
使用标准库
DMA配置:
DMA_InitTypeDef DMA_InitStructure;
//DMA_DeInit(DAC_DMA_STREAM); //Deinitialize the DMAy Streamx registers to their default reset values.
/* 使能DMA1时钟 */
RCC_AHB1PeriphClockCmd(DAC_DMA_CLK, ENABLE);
/* 配置DMA1 */
DMA_InitStructure.DMA_Channel = DAC_DMA_CHANNEL;
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_WAVEADDRESS; //外设数据地址
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&data12bit ; //内存数据地址
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; //数据传输方向内存至外设
DMA_InitStructure.DMA_BufferSize = POINT_NUM; //缓存大小为POINT_NUM字节
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设数据地址固定
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存数据地址自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据以半字为单位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据以半字为单位
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //单次模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高DMA通道优先级
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DAC_DMA_STREAM, &DMA_InitStructure);
DMA_Cmd(DAC_DMA_STREAM, DISABLE);
再次启用DMA传输
DMA_Cmd(DAC_DMA_STREAM, DISABLE);
DMA_SetCurrDataCounter(DAC_DMA_STREAM,POINT_NUM);
DMA1->HIFCR = (uint32_t)DMA_Stream6_IT_MASK; //中断标志清零(DMA_Stream6_IT_MASK在stm32f4xx_dma.c中定义,放到头文件中使用)
DMA_Cmd(DAC_DMA_STREAM, ENABLE);