stm32串口怎么用DMA接收不定长数据,求大神点拨

2019-07-14 18:31发布

STM32串口怎么用DMA接收不定长数据,求大神点播
1. 网上查到,空闲中断+DMA可以接收不定长数据,但是看了好多,只是知道空闲中断里面可以得到缓存器剩余数据量,从而可以求出已经接收的数据量。然后就没了,那么怎么实现不定长接收呢?
2. 缓存区并不能从头刷新,比如说,9个数据量的缓存,我传4个数,那么我下次传6个,这时候缓存器并不能从新从第一位开始刷新,而是接着存储,然后数据就乱了,所以并没有实现不定长接收。我想要不管传输多长字节都可以让缓存区从头开始缓存,这样并不知道怎么实现期待大神

3. 或者说我的思路是错的,DMA接收不定长数据应该用别的方式,有懂的大神帮忙说一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
大洼球王
2019-07-14 23:50
1.进入空闲中断后,先关闭DMA
2.读取数据长度,
3.重新设置重新设置DMA传输数据数量
4.开启DMA
if(USART_GetITStatus(USART6, USART_IT_IDLE) != RESET)//如果为空闲总线中断  
{  
USART_ReceiveData(USART6);  
USART_ClearITPendingBit(USART6, USART_IT_IDLE);  
DMA_Cmd(DMA2_Stream2, DISABLE);//关闭DMA,防止处理其间有数据  
usart6_dma_receive_len = USART6_DMA_RCE_MAX_LENGHT - DMA_GetCurrDataCounter(DMA2_Stream2); //数据长度
usart6_dma_receive_flg = 0x01;
DMA_SetCurrDataCounter(DMA2_Stream2, USART6_DMA_RCE_MAX_LENGHT); //重新设置DMA传输数据数量
DMA_Cmd(DMA2_Stream2, ENABLE);//开启DMA  
}

一周热门 更多>