1、空闲中断和别的接收完成(一个字节)中断,发送完成(发送寄存器控)中断的一样是串口中断;

2、空闲中断是接收到一个数据以后,接收停顿超过一字节时间  认为桢收完,总线空闲中断是在检测到在接收数据后,数据总线上一个字节的时间内,没有再接到数据后发生。也就是RXNE位被置位之后,才开始检测,只被置位一次,除非再次检测到RXNE位被置位,然后才开始检测下一次的总线空闲。一次RXNE位被置位只进行一次。

实现思路:

采用串口1,并配置成空闲中断模式且使能DMA接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成之后,当外部给单片机发送数据的时候,假设这帧数据长度是100个字节,那么在单片机接收到一个字节的时候(RXNE位被置位)并不会产生串口中断,而是DMA在后台把数据默默地搬运到你指定的缓冲区里面。当整帧数据发送完毕之后(接收停顿超过一字节时间)串口才会产生一次中断,此时可以利用DMA_GetCurrDataCounter();函数计算出本次的数据接受长度,从而进行数据处理。

就是在串口空闲中断中使用 Usart1RecLen = DMARecLen-DMA_GetCurrDataCounter(DMA1_Channel5); //算出接本帧数据长度 = DMA缓存的大小 - 剩余 DMA缓存大小

配置时候注意:

USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启空闲中断

DMA_InitStructure.DMA_BufferSize = DMA_Rec_Len;  //DMA通道的DMA缓存的大小

刘乾文

最新文章

  1. Android studio 项目的layout的文件打开,preview 视图无法显示,提示“no sdk found...”可能原因?
  2. Handler 消息传递机制
  3. Codeforces Round #215 (Div. 2) B. Sereja and Suffixes
  4. StringBuilder和StringBuffer区别
  5. Github教程(2)
  6. 36.在字符串中删除特定的字符[Delete source from dest]
  7. matlab产生正态分布样本
  8. codeforces 285 D. Permutation Sum 状压 dfs打表
  9. 清理SQL多余登录信息
  10. C#读写word
  11. poj2121--暴力解法
  12. Qt多线程(有详细例子)
  13. 8位基本定时器(TIM4)
  14. input[type='file']样式美化及实现图片预览
  15. thinkphp mysql查询结果为什么全是string问题
  16. Xshell5 提示要继续使用此程序,您必须应用最新的更新或使用新版本
  17. 通用Logging框架设计
  18. lvm创建和在线扩容
  19. python3 不知文件编码情况下打开文件代码记录
  20. 编译和运行java文件 找不到或无法加载主类

热门文章

  1. OO结课了,狂喜
  2. Kubernetes删除一直处于Terminating状态的namespace
  3. RTSP 流相关工具介绍
  4. Vue和Node.js交互之token
  5. 没有SEO的DiscuzQ 值不值得站长选择?
  6. Android埋点技术概览
  7. 【网络协议】 TCP三次握手的流程
  8. system , DOS 命令
  9. POJ1904 强联通(最大匹配可能性)
  10. LA3135简单多路归并(优先队列)