STM32 407 USART+DMA接收(不用中断)

本文介绍了如何使用STM32的DMA功能优化串口通信,避免中断影响其他任务。通过初始化DMA,配置串口,以及解析DMA接收的数据,实现了高效的数据接收。这种方法特别适用于对时序要求严格的场景。
摘要由CSDN通过智能技术生成

在需要与上位机通信的时候,往往采用串口的方式,同时接收上位机的指令的优先级要最高,以免相应不够及时,串口优先级过高造成的后果就是别的任务被频繁的打断,特别是跟其他传感器通信的时候,对于时序的要求十分的严格,串口频繁的进入中断造成时序被打断,往往不能得到正确的数据。针对这个问题,可以采用DMA形式来接收上位机的数据,进而避免进入串口中断。

关于DMA,原理就不讲了,直接上代码。

 

第一步:初始化DMA

void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx,u32 par,u32 mar,u16 ndtr)
{
     DMA_InitTypeDef  DMA_InitStructure;
    if((u32)DMA_Streamx>(u32)DMA2)   //得到当前的stream属于DMA2还是DMA1
    {
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE); //DMA2使能
    }
    else
    {
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE); //DMA1使能
    }
    DMA_DeInit(DMA_Streamx);
    while(DMA_GetCmdStatus(DMA_Streamx)!=DISABLE){}  //等待DMA可配置
         
  /* 配置 DMA Stream */
  DMA_InitStructure.DMA_Channel = chx;            //通道选择
  DM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值