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

串口接收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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版