首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51单片机串口通信错误的原因

51单片机串口通信错误的原因

一直把串口当做测试用途,像正在调试USB,用的是CH372,PC通过CH372(USB)发一个字符到单片机,单片机再通过串口回传这个字符,从而验证CH372是否收到字符,结果出现意想不到的错误,错误还挺有规律的。就是发16位字符0A,接收到字符用16位显示是8A;发2A,显示AA;发2B,显示AB,就是最高位(第8位)0变为1了,试验了几个都是一样。

7 天前 上传
下载附件 (30.97 KB)



[url=]点击看原图[/url]



  之前老板也是同样的问题(可见这事是多么普遍),不过当时由于不是我的事,就没管。问了一下老板,才知道是晶振的问题,之前板子是用11.0952MHz晶振,现在的板子是12MHz,程序中串口通信也没改预置值,直接就下载了,结果是误差太多,前面的码没事,但误差积累,最后的码0就变成1了。敲响警钟!
  程序中串口初始化

7 天前 上传
下载附件 (19.42 KB)



  可是板子用的是12MHz晶振。

7 天前 上传
下载附件 (36.69 KB)



  通过这个小程序,可以看到误差为8.5%,通常要求不出现误码的话,误差要求在4.5%以下,而对于传统的51单片机来说,最好是选择11.0592的晶振,因为这个频率,不会有误差,也就不可能误码。


  做单片机的串口通信,要注意单片机所用的晶振。   

    原文出自:中国电子技术论坛单片机论坛
返回列表