STM32F4 DMA

来源:互联网 发布:营销活动数据分析报告 编辑:程序博客网 时间:2024/05/01 01:46

DMA是一个搬运工。
1.DMA配置过程(串口发送DMA):
① 使能DMA时钟:RCC_AHB1PeriphClockCmd();
② 初始化DMA通道参数:DMA_Init();
③使能串口DMA发送,串口DMA使能函数:USART_DMACmd();
④查询DMA的EN位,确保数据流就绪,可以配置:DMA_GetCmdStatus();
⑤设置通道当前剩余数据量:DMA_SetCurrDataCounter();
⑥使能DMA1通道,启动传输:DMA_Cmd();
⑤查询DMA传输状态:DMA_GetFlagStatus();
⑥获取/设置通道当前剩余数据量:DMA_GetCurrDataCounter();
2.DMA配置函数:

void DMA_Config_Test(DMA_Stream_TypeDef* DMA_Streamx,u32 Channel,u32 PeripheralBaseAddr,u32 MemoryBaseAddr,u16 Date){    DMA_InitTypeDef DMA_InitStruct;    if((u32 )DMA_Streamx>(u32)DMA2)    {        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);     }    else                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);    while(DMA_GetCmdStatus(DMA_Streamx)!=DISABLE);    DMA_InitStruct.DMA_Channel=Channel;    DMA_InitStruct.DMA_Memory0BaseAddr=MemoryBaseAddr;    DMA_InitStruct.DMA_PeripheralBaseAddr=PeripheralBaseAddr;    DMA_InitStruct.DMA_DIR=DMA_DIR_MemoryToPeripheral;    DMA_InitStruct.DMA_BufferSize=Date;    DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;    DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;    DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;    DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;    DMA_InitStruct.DMA_Mode=DMA_Mode_Normal;    DMA_InitStruct.DMA_Priority=DMA_Priority_Medium;    DMA_InitStruct.DMA_FIFOMode=DMA_FIFOMode_Disable;    DMA_InitStruct.DMA_FIFOThreshold=DMA_FIFOThreshold_Full;    DMA_InitStruct.DMA_MemoryBurst=DMA_MemoryBurst_Single;    DMA_InitStruct.DMA_PeripheralBurst=DMA_PeripheralBurst_Single;    DMA_Init(DMA_Streamx, &DMA_InitStruct);}void DMA_Enable(DMA_Stream_TypeDef* DMA_Streamx,u16 Date){    DMA_Cmd(DMA_Streamx,DISABLE);    while(DMA_GetCmdStatus(DMA_Streamx)!=DISABLE);    DMA_SetCurrDataCounter(DMA_Streamx,Date);    DMA_Cmd(DMA_Streamx,ENABLE);}
0 0