DMA+USART接收数据,为什么只能接收到一次

2019-08-22 15:48发布

STM32F205 DMA+USART接收数据。按照网上的说法,总线空闲中断里已经关掉了DMA,而后设置传输次数重启,可是还是只能接收一次。之后DMA_GetCurrDataCounter(DMA1_Stream5)返回值一直都是初值。代码:
rx_len = USART2->SR;rx_len = USART2->DR;
USART_ClearITPendingBit(USART2, USART_IT_IDLE);
DMA_Cmd(DMA1_Stream5, DISABLE);
。。。。。。
。。。。。。
while(DMA1_Stream5->CR & (uint32_t)DMA_SxCR_EN);        //ÅD¶ÏS5CRμÄENλêÇ·ñÎa0
DMA_SetCurrDataCounter(DMA1_Stream5, UART_RX_LEN);
DMA_Cmd(DMA1_Stream5, ENABLE);


谁能帮忙看看是怎么回事????



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
JUSTNIUB
2019-08-23 06:58
我最近在研究F0系列的DMA,在文档上看到这样一句话
If a DMA channel is disabled, the DMA registers are not reset. The DMA channel registers
(DMA_CCRx, DMA_CPARx and DMA_CMARx) retain the initial valuesprogrammed during
the channel configuration phase.
大意讲的是如果禁止掉DMA功能后,再使能DMA,相关DMA通道的寄存器不会被复位掉,会保留上一次执行的值
在你的程序里面,在接收完一次数据后,失能DMA通道时,DMA的CNDTR寄存器应该已经被清0了
而当你再次去使能它时,这个寄存器一直为0,所以就不会去产生接收的动作,所以你读取出来DR的值一直没有更新,就会是第一次的数值。

个人拙见。

一周热门 更多>