STM32F207运用串口空闲中断+DMA接收不定长数据

本文介绍了如何利用STM32的串口空闲中断结合DMA来接收不定长度的数据。在传统的DMA接收中,由于预设的长度限制,无法直接处理不定长数据。通过串口空闲中断,可以在数据传输完成后触发中断,从而获取实际的数据长度。文章详细讲解了配置串口1和DMA_Channel_4的过程,并提供了在中断中计算数据长度的方法,确保在数据处理过程中不会因为新数据的到来导致错误。读者可以通过串口调试助手进行测试验证。
摘要由CSDN通过智能技术生成

1.我们知道DMA可以自动的不在CPU干预下,自动把数据重外设存储到内存(我们这节讲的),内存到外设,内存到内存等。但是DMA接收的是指定长度的,在接收不定长数据的时候DMA就傻眼了。网上有许多方法讲解运用定时器超时检测来接收不定长数据,而我们现在要讲的是运用串口空闲中断+DMA的方式接收不定长数据。

2.我们调试用的是串口1、DMA_Channel_4。具体的配置见下面程序:

DMA接收配置:

void USART1_DMA_Config(void)
{
    DMA_InitTypeDef DMA_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);//开启DMA时钟
        DMA_InitStructure.DMA_Channel = DMA_Channel_4;//通道4 
        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)USART1_DR_Address; //外设地址为[#define USART1_DR_Address    (0x40011000+0x04)]
        DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)Data_Buffer; //内存地址
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设到内存
        DMA_InitStructure.DMA_BufferSize = 65535; //缓冲大小
        DMA_InitStructure
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值