王熊猫 发表于 2017-7-26 16:22:53

STM32 串口接收DMA模式

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功能禁止后,还在继续搬运,直到搬运的数据大小达到设置好的大小为止?望大神指点。


MrJiu 发表于 2017-7-27 09:14:07

我印象里面,好像是禁止DMA的时候,会把这个周期执行完,具体,我觉得你可以看看参考资料!!!

王熊猫 发表于 2017-7-28 17:07:03

MrJiu 发表于 2017-7-27 09:14
我印象里面,好像是禁止DMA的时候,会把这个周期执行完,具体,我觉得你可以看看参考资料!!! ...

我看的数据手册里面对DMA没有这方面的介绍啊,不过谢谢你了。我准备再去找找资料。
页: [1]
查看完整版本: STM32 串口接收DMA模式