学前班
最后登录1970-1-1
在线时间 小时
注册时间2017-2-16
|
static void GPS_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/*开启DMA时钟*/
RCC_AHBPeriphClockCmd(GPS_DMA_CLK, ENABLE);
/*设置DMA源:串口数据寄存器地址*/
DMA_InitStructure.DMA_PeripheralBaseAddr = GPS_DATA_ADDR;
/*内存地址(要传输的变量的指针)*/
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)gps_rbuff;
/*方向:从内存到外设*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/*传输大小DMA_BufferSize=SENDBUFF_SIZE*/
DMA_InitStructure.DMA_BufferSize = GPS_RBUFF_SIZE;
/*外设地址不增*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/*内存地址自增*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*外设数据单元*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*内存数据单元 8bit*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA模式: 不断循环*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
/*优先级:中*/
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
/*禁止内存到内存的传输*/
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
/*配置DMA的通道*/
DMA_Init(GPS_DMA_CHANNEL, &DMA_InitStructure);
GPS_Interrupt_Config();
DMA_ITConfig(GPS_DMA_CHANNEL,DMA_IT_HT|DMA_IT_TC,ENABLE); //ÅäÖÃDMA·¢ËÍÍê³Éºó²úÉúÖжÏ
/*使能DMA*/
DMA_Cmd (GPS_DMA_CHANNEL,ENABLE);
/* 配置串口 向 DMA发出TX请求*/
USART_DMACmd(GPS_USART, USART_DMAReq_Rx, ENABLE);
}
我有个问题,为什么DMA的传输方向是从内存到外设,不是应该GPS上的数据传输到串口的RX端口,然后由DMA运输到内存上吗,难道是因为从内存到外设将串口的波特率等配置传输到GPS上吗
|
|