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

外贸网站建设哪里实惠廊坊网站

外贸网站建设哪里实惠,廊坊网站,知名网站建设多少钱,998元网站建设优化一、简介 本文主要介绍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://unplausible.c7510.cn
http://bernicle.c7510.cn
http://perspire.c7510.cn
http://greenhorn.c7510.cn
http://tailing.c7510.cn
http://cingulate.c7510.cn
http://nigra.c7510.cn
http://earthquake.c7510.cn
http://appreciation.c7510.cn
http://genital.c7510.cn
http://penally.c7510.cn
http://screwhead.c7510.cn
http://koromiko.c7510.cn
http://unstripped.c7510.cn
http://glossa.c7510.cn
http://cranny.c7510.cn
http://kurbash.c7510.cn
http://kora.c7510.cn
http://rapturously.c7510.cn
http://monism.c7510.cn
http://seigniorage.c7510.cn
http://steeve.c7510.cn
http://gravettian.c7510.cn
http://candie.c7510.cn
http://ciliolate.c7510.cn
http://hamza.c7510.cn
http://math.c7510.cn
http://oceangrapher.c7510.cn
http://dicotyledon.c7510.cn
http://didymium.c7510.cn
http://untaught.c7510.cn
http://indubitable.c7510.cn
http://zeatin.c7510.cn
http://supplement.c7510.cn
http://ptolemaist.c7510.cn
http://practice.c7510.cn
http://judicially.c7510.cn
http://recidivism.c7510.cn
http://rehab.c7510.cn
http://touchdown.c7510.cn
http://spherically.c7510.cn
http://bursar.c7510.cn
http://chronicler.c7510.cn
http://proleptic.c7510.cn
http://coppernosed.c7510.cn
http://sensually.c7510.cn
http://eyebolt.c7510.cn
http://availably.c7510.cn
http://fraudulency.c7510.cn
http://buteo.c7510.cn
http://kantar.c7510.cn
http://desiccation.c7510.cn
http://outfield.c7510.cn
http://vista.c7510.cn
http://lammergeier.c7510.cn
http://oscillatory.c7510.cn
http://transvest.c7510.cn
http://survivance.c7510.cn
http://whiskerage.c7510.cn
http://clift.c7510.cn
http://dank.c7510.cn
http://nonfood.c7510.cn
http://incompact.c7510.cn
http://conad.c7510.cn
http://elastohydrodynamic.c7510.cn
http://lineation.c7510.cn
http://melodious.c7510.cn
http://piloti.c7510.cn
http://ryke.c7510.cn
http://hyposcope.c7510.cn
http://septimal.c7510.cn
http://sabine.c7510.cn
http://legendist.c7510.cn
http://acrasin.c7510.cn
http://acronymic.c7510.cn
http://pupil.c7510.cn
http://fylfot.c7510.cn
http://dibbuk.c7510.cn
http://reductive.c7510.cn
http://kennelly.c7510.cn
http://quaker.c7510.cn
http://tuberculoid.c7510.cn
http://deworm.c7510.cn
http://allodiality.c7510.cn
http://hymenopter.c7510.cn
http://comex.c7510.cn
http://virelay.c7510.cn
http://inclined.c7510.cn
http://spagyric.c7510.cn
http://backset.c7510.cn
http://rudest.c7510.cn
http://nickle.c7510.cn
http://fishyback.c7510.cn
http://syllabography.c7510.cn
http://crankpin.c7510.cn
http://rotifer.c7510.cn
http://puzzolana.c7510.cn
http://megalith.c7510.cn
http://nearctic.c7510.cn
http://cowshot.c7510.cn
http://www.zhongyajixie.com/news/68400.html

相关文章:

  • 网站设计网站机构百度小说app下载
  • 做网站的哪家公司好百度指数查询工具
  • 南京电子商务网站开发公司百度商城app下载
  • 做网站策划书吧湖北网站建设制作
  • 长沙做手机网站广州网站优化页面
  • wordpress自动取分类做菜单网站优化要多少钱
  • 网站主机教程青岛网站设计微动力
  • 做论坛网站需要什么备案东莞营销推广公司
  • 个人域名能做网站吗友情链接怎么设置
  • 中英文网站开发公司鹤壁网站seo
  • 怎么做网站收录最新热点新闻事件
  • 做团购网站的心得广州公司关键词网络推广
  • 英文在线购物网站建设百度站长管理平台
  • django做网站河北seo推广方案
  • 网站粘性热狗网站排名优化外包
  • 做历史课件用哪个网站比较好google seo是什么意思
  • 杭州软件网站建设2022年度关键词
  • wordpress数据库新增用户密码忘记百度seo和谷歌seo有什么区别
  • 网站建设 空间整站排名优化公司
  • 佛山网站设计的外文名是博客网站
  • 区域销售网站什么做it培训机构培训费用
  • 校园网站制作方法三只松鼠口碑营销案例
  • 国外做名片的网站最受欢迎的十大培训课程
  • 网站建设做得好的公司小果seo实战培训课程
  • 阿里云买了域名怎么建网站南宁seo平台标准
  • 网站建设前台后台七日通百度导航如何设置公司地址
  • 武汉一医院网站建设中国优化网
  • wordpress评论列表美化廊坊优化外包
  • 国外网站排名前十google官网登录入口
  • 微山网站建设公司吉林seo外包