一些好文章
一种单片机数据解析方法:https://mp.weixin.qq.com/s/GVH8MZrlbVKXanD45wOYOw

单片机串口接收数据需要注意以下几点
1.接收数据要有顺序,接收到在通信指令范围内的数据就设置接收下一个数据,否则下一个还是从头数据开始
2.头数据设定在有效范围内才接收下一个数据,其他数据接收视情况定,如果中断接收没处理,需要后期对接收的数据处理,不在通信指令范围内的剔除掉不做处理
3.超时处理:超过一定时间没接收到下一个数据时,下一个数据从头数据开始,比如一组4个数据,结果收到5个数据,并且第5个数据是另一组的头数据,如果没有超时处理会造成下一次数据无法处理
4.用2个数组接收数据:A数据接收一组数据完成后转移到B数据,预防处理混乱,比如一组4个数据,结果收到5个数据,并且第5个数据是另一组的头数据,结果覆盖了第一个的头数据导致处理出错。

实例:波特率1200,一组4个数据的串口中断处理函数

#define RE_START     0x01
#define RE_DATA     0x02
#define RE_SUM      0x03
//#define RE_END       0X04void UC_IrqServerRec(void) interrupt 4
{static unsigned char i=0;unsigned char temp;  static unsigned char XDATA count=0;if(RI){temp = SBUF;        //接收缓冲数据RI = 0;switch(g_McuRecvState)  // 默认g_McuRecvState=RE_START{case RE_START:if((temp >= 0x20)&&(temp <= 0x80))  // 如果接收的头在设定的通信指令范围内{           g_McuRecvState = RE_DATA; //   下一个数据处理地方count=0;g_McuUartDataBuf[count] = temp;count++;        g_UartTimeFlag=8;  //接收超时处理,定时器中断里如果大于0则每5毫秒减1,减到0后设置g_McuRecvState = RE_START;}else // 如果接收的头数据不在通信范围内,下一次还从头开始{g_McuRecvState = RE_START;}break;case RE_DATA:   //DATAg_McuUartDataBuf[count] = temp;count++;  if(count==3){g_McuRecvState = RE_SUM;    }       break;case RE_SUM:  //CR VERIFYcount=0;for(i=0;i<3;i++){g_McuDataBuf[i]=g_McuUartDataBuf[i];//转移数据到另一个数组,防止出错时收到5个数据第5个数据时把第一个数据刷掉了count += g_McuDataBuf[i];}g_McuRecvState = RE_START;if(count==temp){g_UartData=1; // 表示正确接收完一组数据}break;                             default: break;}}
}

单片机串口接收数据的一些经验与教训相关推荐

  1. stc51单片机串口接收多字节数据

    stc51单片机串口接收多字节数据 简介 51单片机有2个定时器,一个做串口波特率,一个做数据截止帧延时检测,硬件平台测试使用的是stc8的单片机,但是可以往51移植 代码 #include &quo ...

  2. 单片机串口接收的几种常用的数据处理方法

    单片机串口接收的几种常用的数据处理方法 一.为什么串口接收的数据需要处理 我们在做项目的时候经常会用到串口,当我们用串口和别的设备通讯的时候就需要严格遵循通讯协议,然而,仅仅是遵循通讯协议是不够的,因 ...

  3. 串口通信——串口接收数据,发送数据

    十六进制        HEX /hexadecimal   /ˌheksəˈdesɪml/ 十进制            DEC /decimalism     /'desiməlizəm/ 二进制 ...

  4. STM32如何从串口接收数据,取出数据中的密码段再保存到flash中。

    STM32如何从串口接收数据,取出数据中的密码段再保存到flash中 STM32如何从串口接收数据,取出数据中的密码段再保存到flash中u8 Usart2_buf[256]; unsigned in ...

  5. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  6. 多串口接收数据并显示-自定义串口通信类-调用委托显示数据-保存数据-实例:10串口接收数据并显示加保存

    当时搜了很久,没咋都到合适的思路,就自己整理一份吧 大致实现的功能: 通过串口接收数据,进行解析,然后显示,或者保存数据: 主要:多个串口接收显示都能用: 大致思路: 1.新建一个类SerialPor ...

  7. STM32MP157实现串口接收数据上云-MP157连接4G模块和电脑

    文章目录 前言 一.打开设备文件 二.串口初始化 三.多线程 四.程序的移植和执行 五.源码(转载请注明出处) 结语 前言 本篇分享: 这次将会用几篇博客分享STM32MP157实现串口接收数据上云的 ...

  8. 51单片机 串口发送数据(只是发送)

    51单片机 串口发送数据(只是发送)用于调试. #include <reg51.h>#define uchar unsigned char #define uint unsigned in ...

  9. 单片机串口发送数据很慢?这种方法帮助你提高!

    大家好,我是张巧龙,本文介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法:之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应 ...

最新文章

  1. 极路由为何获MTK临幸?
  2. 26.SpringBoot事务注解详解
  3. WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
  4. SIP协议学习2-pjsip
  5. react.js基础
  6. 从MongoDB2.4升级到3.0的详细步骤
  7. 红橙Darren视频笔记 模板模式的应用与BaseActivity
  8. 数据分析人员需要掌握SQL到什么程度?3个常考题目刷一刷
  9. linux系统安装gcc依赖包,linux安装gcc需要的依赖包
  10. VB程序设计教程(第四版) 龚沛曾
  11. 使用HTMLcss创建二级导航栏
  12. pvr文件转成png和plist
  13. css样式鼠标放上去变成手的形状
  14. linux进阶-网络安全系统网站服务
  15. Android Studio入学1-3:通过okhttp连接服务器
  16. 点云 3D 目标跟踪 - AB3DMOT(IROS 2020, ECCVW 2020)
  17. 测试2k显示器的软件,玩家亲自测试为什么需要2K显示器
  18. 【渝粤题库】广东开放大学 互联网金融本 形成性考核
  19. 【Python】什么是递归函数?
  20. 100-数据结构与算法(下篇)

热门文章

  1. 总结(算不上总结的总结)
  2. Xrdp与i3搭建超轻量级远程PC
  3. 基于matlab的绿色番茄识别定位方法
  4. Flutter轻松实现Adobe全家桶Logo列表功能
  5. 小白入门:什么是CURD?
  6. 计算机专业英语被动语态举例,第七讲被动语态的译法_计算机专业英语教程
  7. 【数据结构】测试4 串
  8. OpenCV—python图像以数组形式输出
  9. 夺命雷公狗TP3.2.3商城2-----后台模版引入和后台控制器的创建
  10. a标签download下载