03-单片机模块化程序: 单片机接收数据之空闲中断

资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git

点击加入群聊【单片机,物联网,上位机】:ESP8266开发交流群

说明1:知识从未如此性感。 烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系!

说明2:学的是思想,而非程序!此代码思路适用于所有的单片机。

说明3:学会以后,下面的代码可能会跟你一辈子!

说明4:这一系列文章是为大幅度裁剪本人博客文章!使博客文章更有条理。便于推其它教程!

 

1. 前言

在单片机通信项目中,经常会用到接收数据,然后处理.大家有没有想过什么方式才是最优的方式?

大家是否想过有没有什么标准的方案可以解决一切可能?

注:此节并不是标准的方案,这节只是作为抛砖引玉!

2.想想下面的例子

假设单片机接收的数据为

0x55 0xAA 0x03 0x05 0x03 0x22 0x34 0x56 0x12 0x45 0xAA 0x55
0x55 0xAA作为数据的开头,中间是数据,0xAA 0x55作为数据的结尾
你会怎么做?

青铜这样做

串口中断里面判断数据头,数据尾,判断接收完了一整条数据

 

 

 

主循环这样做
我用返回接收的数据,代表处理数据

 

 

 

测试

 

 

 

上面的程序有好多问题.我就说其中一个
如果我还有其它不同的数据,串口里面就要弄好多判断.

 

白银这样做

用定时器判断接收到一条数据之后再去处理
思路:
如果接收到数据,控制空闲累加变量1ms做一次加1操作
串口如果一直接收数据则清零空闲时间累加变量
如果空闲累加变量累加到10,说明接收完了数据
串口中断:

 

 

 

定时器

 

 

 

主函数:

 

 

 

 

测试:

 

 

 

利用每条数据之间的空隙,来判断接收完一条数据以后再去做处理!

上面的程序还是不够完美,因为少于10ms间隙的数据是判断不出来的

黄金这样做

STM32自带空闲中断!
打开空闲中断:

 

 

 

串口中断修改:

 

 

 

主函数:

 

 

 

测试:

 

 

 

 

结语

以上程序可以满足大部分简单的通信处理
主要思路就是判断接收完了一条数据以后再去处理.
但是以上程序并不是最优的程序
上面程序有个共同的通病,如果数据过来的比较快,处理数据慢,则就会丢失数据!

当前才到 黄金级别
后面我给大家准备了 最强王者和荣耀王者

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值