请问串口的DMA串口传输完成中断怎么理解?
static void UART_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/* DMA clock enable (USART RX using dma1) */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
memset(&UartRxRingBuf.rx[UartRxRingBuf.rx_rear], 0, sizeof(UartRxMsgBuf_Arr));
/* Usart1 rx using dma1 channel 5 */
DMA_DeInit(DMA1_Channel5);
/* Periph addr is usart rx data register address */
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)UartRxRingBuf.rx[UartRxRingBuf.rx_rear];
DMA_InitStructure.DMA_BufferSize = 15;
/* Usart rx data reg need not increment, rx buffer need */
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/* Once transfer one byte and using cycle mode */
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
/* Using highest priority, transfer direction is perihp to memory(USART to memory) */
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel5, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE);
}
如上程序,DMA_InitStructure.DMA_BufferSize = 15;
如果我用DMA接收到的数据都是14字节,永远满不了15节,但一次数据传输完成,问能否进入传输完成中断?
我在家做实验不太方便,望明白的人指点下。
|