你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口接收DMA+IDE中断接收不定长数据的问题请教

[复制链接]
厦门浪子 提问时间:2018-9-3 19:48 /
这段代码是IDE+DAM接收串口数据的,为什么要先进入接收非空中断后然后才开启DMA传输?不会造成第一个数据丢失吗?
  1. void  BSP_Ser2_ISR_Handler (void)
  2. {
  3.         uint8_t clear=clear;

  4.         FlagStatus idle_status;

  5.         if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == SET){
  6.                 USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
  7.                 Ser2_RXDMA_Init();//开启DMA接收
  8.         }
  9.        
  10.         idle_status = USART_GetFlagStatus(USART2, USART_FLAG_IDLE);
  11.     if (idle_status == SET) {
  12.                 clear = USART2->SR;
  13.                 clear = USART2->DR;
  14.                
  15.                 USART_ITConfig(USART2, USART_IT_IDLE, DISABLE);
  16.                
  17.                 if(Ser2_read_f){
  18.                         BSP_OS_SemPost(&BSP_Ser2RxWait);
  19.                         Ser2_read_cnt = CMD_LEN_MAX - DMA_GetCurrDataCounter(DMA1_Channel6);
  20.                 }
  21.                
  22.                 DMA_Cmd(DMA1_Channel6, DISABLE);
  23.                 DMA_DeInit(DMA1_Channel6);
  24.                 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);       

  25.     }       
  26.        

  27. }
复制代码


收藏 评论5 发布时间:2018-9-3 19:48

举报

5个回答
feixiang20 回答时间:2018-9-3 23:37:27
串口实现的3种方式,可以用轮询、中断以及DMA实现,轮询模式为堵塞模式,必须在设定的时间内接收到设定的数据长度才会正确接收;中断模式为非堵塞模式,也是平时用的比较多的,但在HAL库中必须在每次接完之后就要重新开启接收中断,这样在接收不确定长度数据就不好处理;最后发现有一个比较好的方法那就是用串口的空闲中断+DMA实现串口数据的接收,在接收一帧数据只需要中断一次,这样就可以接收不定长数据了

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

jeffhe1 回答时间:2018-9-6 09:42:03
假如先開啟DMA傳輸 , 在DMA傳輸過程中 , uart 有 data 進入 , 引起中斷 , 這樣DMA傳輸的 data 有可能會發生錯誤吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

埃斯提爱慕 回答时间:2018-9-6 10:59:33
提示: 作者被禁止或删除 内容自动屏蔽
wolfgang 回答时间:2018-9-6 11:27:32
接收DMA+IDE中断接收不定长数据
首先要明白机制
1、开启DMA传输是将DMA缓存的内容写入到你真正需要的空间里
2、DMA接收一直都有存在的,将Usart接收到的字符系统自动的写到你设定的DMA缓冲区里。
3、IDE中断发送才开启DMA传输,是为下一次传输做准备。
4、当然速度快了是容易丢失或者几个包一起接收,就要看你系统设计偏好了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

厦门浪子 回答时间:2018-9-9 16:33:33
wolfgang2015 发表于 2018-9-6 11:27
接收DMA+IDE中断接收不定长数据
首先要明白机制
1、开启DMA传输是将DMA缓存的内容写入到你真正需要的空间里 ...

是RXNE中断开启DMA

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版