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功能禁止后,还在继续搬运,直到搬运的数据大小达到设置好的大小为止?望大神指点。
我印象里面,好像是禁止DMA的时候,会把这个周期执行完,具体,我觉得你可以看看参考资料!!! MrJiu 发表于 2017-7-27 09:14
我印象里面,好像是禁止DMA的时候,会把这个周期执行完,具体,我觉得你可以看看参考资料!!! ...
我看的数据手册里面对DMA没有这方面的介绍啊,不过谢谢你了。我准备再去找找资料。
页:
[1]