当前位置: 首页 > news >正文

虚拟货币交易网站建设新浪做网站

虚拟货币交易网站建设,新浪做网站,wordpress andriod,163邮箱注册一、简介 本文主要介绍STM32如何配合USART的IDLE中断实现USART DMA接收不定长的数据。其中使用的接收缓存还是延用前面博客写的乒乓缓存。使用DMA USART接收来替代中断方式或轮询方式的接收主要是为了提高代码的运行效率,中断方式的接收,每接收一个字节便…

一、简介

        本文主要介绍STM32如何配合USART的IDLE中断实现USART DMA接收不定长的数据。其中使用的接收缓存还是延用前面博客写的乒乓缓存。使用DMA USART接收来替代中断方式或轮询方式的接收主要是为了提高代码的运行效率,中断方式的接收,每接收一个字节便会产生一个中断,当串口有大量数据需要接收时,会造成CPU不停的被中断打断,频繁的出入栈造成整个系统不稳定的情况且也会影响到主任务里其它流程的执行时序,造成主任务里的流程滞后现象,影响其它事情的实时性。引进DMA的接收正是为了解决该问题。

二、设计思路

        USART 使用DMA方式接收需要考虑到从USART传输进来的数据可能会出现不定长等现象,在通信协议上该问题属于正常现象。但DMA的传输又需要指定特定长度因此在配置DMA时,我们很难得知要配置多少接收长度,接收长度配置多了,DMA不会产生传输完成标志,配置少了又可能造成频繁触发DMA现象导致数据不好处理,出现要拼包等现象。因此这里使用STM32的特性空闲中断来判断一次DMA的传输完成。空闲是指在串口接收到一帧数据后,没有再接收到数据此时会产生一个空闲帧此时会置位IDLE位,如若配置置IDLEIE位则会进入中断。注:首次配置USART初始化开启TE位的时候也会产生空闲帧需要滤掉。

二、配置流程

        1) USART 使能IDLEIE位

         使能USART1的空闲中断

USART1->CR1 |= 1 << 4;                                // enable IDLE interrupt

        2) USART 配置DMA接收初始化

DMA_USART1_Receive_Config(DMA1_Channel5, (u32)&USART1->DR);void DMA_USART1_Receive_Config(DMA_Channel_TypeDef* DMA_CHx, u32 cpar)
{DMA_CHx->CPAR = cpar;                    //cfg periph addr DMA_CHx->CCR |= 3 << 12;                 //cfg channel prio 3DMA_CHx->CCR &= ~(1 << 4);               //cfg periph to memDMA_CHx->CCR &= ~(1 << 5);               //cfg dma single transferDMA_CHx->CCR |= 1 << 7;                  //cfg mem transfer addr inc
}

        3)使能USART DMA接收

DMA_UART1_RECEIVE_ENABLE(DMA1_Channel5, (u32)p_cur_Usart1_Handle, 256);void DMA_UART1_RECEIVE_ENABLE(DMA_Channel_TypeDef* DMA_CHx, u32 cmar, u16 cndtr)
{USART1->CR3 |= 1 << 6;                    //enable uart dma rxDMA_CHx->CCR &= ~(1 << 0);               //dma channel disableDMA_CHx->CMAR = (u32)cmar;               //cfg mem addrDMA_CHx->CNDTR = cndtr;                  //cfg transfer lendma_cfg_recieve_cnt = DMA_CHx->CNDTR;DMA_CHx->CCR |= 1;                       //dma channel en
}

        4)USART IDLE中断处理

        在void USART1_IRQHandler(void)中断函数里通过获取DR寄存器清IDLE位。并置位recieve_idle 通知处理数据帧。

	if (USART1->SR & (1 << 4)){u8 temp;temp = USART1->DR;recieve_idle = 1;}

        5)IDLE 的处理

        主循环轮询产生IDLE的话表示当前收到一帧完整数据帧,则需要处理,处理流程:关DMA USART接收->获取DMA 传输数据量->切换接收缓存即取发送缓存->使能DMA USART接收。

void idle_process(void)
{if (recieve_idle){recieve_idle = 0;DMA_UART1_RECEIVE_DISABLE(DMA1_Channel5);p_cur_Usart1_Handle->len = GET_DMA_TRANSFER_CNT(DMA1_Channel5);change_curFifo();DMA_UART1_RECEIVE_ENABLE(DMA1_Channel5, (u32)p_cur_Usart1_Handle, 256);}
}

        6)USART DMA发送

        该内容参考上一篇博客STM32 寄存器配置笔记——USART DMA发送

具体代码如下:

 

 

http://www.yayakq.cn/news/770019/

相关文章:

  • 网站标准字体模板之家会员
  • 长沙做网站比较好的公司泉州营销型网站建设
  • 长沙企业官方网站建设企业名录搜索软件排行榜
  • 专注网站建设微信开发代理平台网
  • 怎么授权小说做游戏网站福田区罗湖区宝安区龙华区
  • 美橙互联网站p2p网站开发的流程图
  • win7 搭建iss网站太原网站建设制作报价
  • 个人网站模版网上注册公司流程图
  • 做个电商网站加速器国外
  • 建网站需要怎么做百度小程序制作流程
  • 自己建立公司网站 怎样做平面设计一个月能赚多少钱
  • 福建建设监理网站WordPress大气模板
  • 98建筑网站做自己的网站要花多少钱
  • 网站建设经营属性sem搜索引擎营销
  • wordpress邮件发验证码网站优化价格
  • 有批量做基因结构的网站吗做游戏陪玩网站
  • 网站开发与支付宝端口连接wordpress edit_post
  • 福州建站模板性能网站建设
  • 北京市朝阳区网站制作公司wordpress 新闻模板
  • 做一个网站需要哪些步骤淄博网站制作高端形象
  • 网站开发师职责网上申请营业执照入口
  • 蛋糕网站内容规划南昌企业网站设计公司
  • 在线营销型网站ui设计发展前景及未来
  • 网站建设平台排行榜怎么在平台上做推广
  • 如何查看网站建设的时间中国移动和办公app下载
  • 制作网页网站费用属于资本性支出吗庞各庄网站建设公司
  • 成都编程培训机构排名前十seo自动推广工具
  • 深圳购物网站建手机网站免费做app
  • 上海网站建设最好的公司展示型网站建设方案
  • 网站建设分金手指专业七软件开发一般需要多少钱