
1。芯片:stm32f2072.使用串口DMA模式进行通信,从串口向内存搬运。每次传送的数据包大小为14字节,dma设置的接收数据量为128字节,串口空闲中断和DMA接收完成中断打开。 其中串口空闲中断程序如下: void USART1_IRQHandler(void) { OSIntEnter(); if (USART_GetITStatus(USART1, USART_IT_IDLE) != RESET) { if (DMA_GetCmdStatus(DMA2_Stream2) == ENABLE) { /* * Disable the DMA Rx Stream and wait DMA operation complete * until DMA2_Stream2_IRQHandler() interrupt */ DMA_Cmd(DMA2_Stream2, DISABLE); } /* clear the IDLE flag */ USART_ReceiveData(USART1); } OSIntExit(); } 我不太明白的是在串口中断程序里面disable DMA功能后,为什么还能触发DMA接收完成中断啊?难道DMA功能禁止后,还在继续搬运,直到搬运的数据大小达到设置好的大小为止?望大神指点。 |
我看的数据手册里面对DMA没有这方面的介绍啊,不过谢谢你了。我准备再去找找资料。