经常遇到初学者,对单片机串行通讯出了问题不知道如何办的情况。其实最有效的调试方法是用示波器观察收发数据的波形。通过观察波形可以确定以下情况:

1、数据是否接收或发送;

2、数据是否正确;

3、波特率是否正确;

一、串行数据的格式

  异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5、6、7、8位,停止位可以是1、1.5、2位。起始位是一个值为0的位,对于正逻辑的TTL电平,起始位是一位时间的低电平;停止位是值为1的位,对于正逻辑的TTL电平,停止位是高电平。对于负逻辑(如RS-232电平)则相反。对于数据0xAA, 8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图2(RS-232电平)所示。

图1、TTL电平的串行数据帧格式(0xAA)

图2、RS-232电平的串行数据帧格式(0xAA)

二、 根据波形图计算波特率

图3 波特率计算示意图

如图3,其中灰色线是示波器的时间分度线,此时假设是200ms/格。可以看了,第一个字节的10位(1位起始位,8位数据位和1位停止位)共占约1.05ms,这样可计算出其波特率约为:

10bit / 1.05ms X 1000 ≈ 9600 bit/s

如果上图中的时间轴是100ms/格,同样可以计算出波特率应是19200bit/s。

三、根据波形图判断RS-485收发数据的正确与否

  RS-485是一种半双工的串行通讯方式,485电平芯片所以要正确接收和发送数据,必需保证控制信号和数据的同步,否则要么发送数据丢失,要么接收数据可能丢失。

图4 RS-485的正确发送数据时序

图4中,发送控制信号的宽度基本与数据信号的宽度一致,所以能保证发送数据的正确和发送后及时转为接收。

图5 RS-485控制信号太短时的时序

图5中,由于控制信号关闭过早,则第二个字节的后两位将发送错误;

图6 RS-485控制信号太短时的时序

图6中,由于控制信号关闭过迟,使485芯片在发送数据后,不能及时转到接收状态,此时总线若有数据过来,则本单元将不能正确接收。

最新文章

  1. 0039 Java学习笔记-多线程-线程控制、线程组
  2. 用goto做异常处理
  3. Request 、Response 与Server的使用
  4. 原生JS中常用的Window和DOM对象操作汇总
  5. tomcat内存溢出 PermGen space
  6. RHEL7全新初始化进程管理systemd(图形启动和非图形启动切换)
  7. [python][flask][flask-SQLAlchemy]关于flask-SQLAlchemy的初级使用教程
  8. iOS: 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
  9. MHA环境搭建【4】manager相关依赖的解决
  10. 在html中使用javascript显示本地图片的
  11. Win7 Cygwin环境试验Nutch tutorial遇到的异常解决方法
  12. VMWare、KVM、Virtualbox克隆或复制Linux虚拟机后eth0找不到的解决方案
  13. 通过 JSONP 实现跨域请求
  14. gitbook 入门教程之插件介绍
  15. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
  16. List接口:(介绍其下的两个实现类:ArrayList和LinkedList)
  17. 自动生成简单四则运算的C语言程序
  18. VSCode+python插件
  19. ibatis集成封装之路(to mysql)
  20. 撩课-Web架构师养成系列第一篇

热门文章

  1. 基于jQuery在线问卷答题系统代码
  2. java获取当月的第一天和最后一天,获取本周的第一天和最后一天
  3. php7+apache2.4 安装(window)
  4. Eclipse里安装插件
  5. 常用shell命令实战
  6. JavaScriptSerializer 时间格式化
  7. 接口(interface)那点事
  8. unicode编码转汉字
  9. (五)Qt实现自定义模型基于QAbstractItemModel
  10. selenium测试(Java)-- 验证信息(八)