|
usart1的RX 的dma通道是channle5
现在我用DMA方式来进行USART1的数据接收。
我想请问的是: 我最终接收判断应该是在DMA中断里面做的喽,因为DMA_TC表示DMA传输指定的buffer大小完成了,对吧。 那这样的话,我USART1的接收中断还要打开吗?
我现在测试的代码里面是打开的,但是我在DMA中断DMA1_FLAG_TC5=1的情况下,并没有在RX的buffer中看到我从串口发出来的数据,这是为什么呢?
我这样做有问题吗? : 请看下面代码
DMA中断:========================= void DMA1_Channel5_IRQHandler(void) { if(DMA_GetFlagStatus(DMA1_FLAG_TC5) != RESET) { RxCounter = 0; } if(DMA_GetFlagStatus(DMA1_FLAG_GL5) != RESET) { } if(DMA_GetFlagStatus(DMA1_FLAG_HT5) != RESET) { } }
USART1中断:===================== void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { /* Read one byte from the receive data register */ RxBuffer1[RxCounter++] = USART_ReceiveData(USART1);
if(RxCounter == NbrOfDataToRead) { /* Disable the USART2 Receive interrupt */ //USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); RxCounter = 0; } } }
DMA 初始化: ========================= DMA_DeInit(DMA1_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)RxBuffer1; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize = TxBufferSize1; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel5, &DMA_InitStructure);
main函数中的功能使能:================= USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); DMA_ITConfig(DMA1_Channel5, DMA_IT_TC, ENABLE); DMA_Cmd(DMA1_Channel5, ENABLE); USART_Cmd(USART1, ENABLE);
|
|