0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机串口设置问题如何解决

j4AI_wujianying 来源:陈翠 2019-06-29 11:31 次阅读

最近测试涉及到底层串口代码的修改。经过这次修改,突然发现其实自己对于串口的一些特性以前并不是十分清楚。

首先遇到的一些问题:

1)在使用IO的数据位的时候,没有考虑校验位所占的位数。

2)在设置串口输入的时候,使用悬空输入。

关于1),在一次使用STM32串口参数9600,N,8,1与另一个 8051MCU通信的时候发现偶校验没有问题,但是无校验通信就出现异常。但是,当将STM32与电脑通信的时候,偶校验与无校验通信又完全都是正确的。8051MCU单独与电脑通信也都是完全正确的。查看代码,还真不知道有什么不对劲的。因为这段代码,用了很长时间了。后来一个同事看代码后,提醒说对于数据位的设置,偶校验和无校验是一致的,既然没有数据位,有可能会少一位。从这点看,这段代码可以修改看看。于是在这个地方,将偶校验的时候数据位长度设置为9bit,无校验的时候设置为8bit。重新测试,发现通信正常了。

原来这段代码,由于一直用偶校验进行通信,所以对于奇校验和无校验的参数设置,没有测试过。虽然,已经存在很长时间,但是由于一直没有用到奇校验和无校验,于是这个BUG。一直潜伏到现在。直到这次使用到才发现。

关于2),是在一次使用中发现,串口线的连接如果与从机分离,则串口上会莫名接收到一些00数据。一开始没有在意,以为是离开确定电平后,导致的什么干扰造成的。但是,没有去考虑是什么造成接收这么容易受干扰。直到有一次,和同事确认串口的初始化电平设置时,他告诉说是悬空设置。这下子感觉不对了,悬空很容易造成受干扰。于是马上查看串口的初始化代码,发现确实是悬空设置。马上修改了。在测试,将连接的串口悬空,也没有再收到。

后来查看了关于串口的内容发现以前有些东西没有注意到:

串口分为同步串口,异步串口。

这里说的串口指通常说的UART,异步串行通信接口

还有就是同步串口,即SPI,I2C之类。

首先,UART不需要接收和发送两端严格的时钟同步,在不通信的时候IO电平呈现高电平,即空闲。所以对于UART来说,如果没有数据交互,数据线是呈现高电平的。

对于UART的数据位问题,是包含数据+校验的bit数总和。

为了提高UART的抗干扰性,无论在哪一种工作模式下,都能够保证数据线上有稳定的电平。所以串口设置时,对于串口输入引脚设置为上拉输入。对于串口的设置,输出一般设置为push-pull,输入一般设置为pull up。

(这里有一个疑问,为什么串口还会留下悬空输入?既然一般情况下,上拉输入对于接收方而言会处于一个比较稳定的状态。如果将输入设置为悬空输入反而会引入接收不稳定的因素,为什么会有悬空输入。在什么地方,又会使用悬空输入呢?在不同电压的时候可能是一种情况,及3.3VTTL电平的CPU,与5.0VTTL的CPU直接使用串口通信的时候,为了避免电平问题采用悬空有可能是一个种情况。)

这里也提出一个问题,对于系统的底层代码要格外严谨。保证开发出来的代码,有高的稳定性,可靠性。才能保证其他程序顺利开发。

同时对于代码的测试要尽可能覆盖所有代码。对于开发过程中,引入的功能及代码要进行实际测试,明确其执行到的时候对于程序的影响。没有运行过的代码,在程序中就是一座可能喷发的活火山。所以对于添加的功能及代码,要确保执行过。

在开发过程中,要时刻保持警惕,警惕可能出现异常的地方,学着用推理去找到BUG的巢穴。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43970

    浏览量

    620784
  • uart
    +关注

    关注

    22

    文章

    1158

    浏览量

    99951

原文标题:最近遇到的单片机串口设置问题

文章出处:【微信号:wujianying_danpianji,微信公众号:单片机精讲吴鉴鹰】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    51单片机串口通信原理与应用

    本文我们主要讲单片机串口的工作原理和如何通过程序来对串口进行设置,以及根据所给出的实例实现与PC 机通信。
    发表于 01-08 13:51 9289次阅读

    求教!LabVIEWPC与单片机之间串口通信问题

    各位,求教!我在用LabVIEW做pc与单片机之间的串口通信,我遇到的问题是在接受数据和发送数据两者切换的时候程序会卡死,请问各位知道如何解决吗?拜谢!
    发表于 05-09 11:17

    51单片机教程串口通讯SBUF

    `郭天祥51单片机教程,串口通讯中有一题,以16进制发送0-65536之间任意数,单片机收到后再数码管上显示。上位发的数据在SBUF中,可SBUF最大只能写入255,更大的数据写不进
    发表于 03-29 15:29

    单片机串口和上位串口进行通信

    单片机串口通信中,接收多位数据到数组,发送多位数据的代码// 下面的代码用于:单片机串口何上位串口
    发表于 11-25 08:29

    单片机串口的介绍

    目录串口的介绍串口硬件电路串口电平标准常用通信接口比较51单片机的UARTUART参数及时序图UART模式图串口和中断串行口相关寄存器
    发表于 11-30 06:24

    关于单片机串口通信问题

    如题,请问各位大佬,STC单片机8位的单片机在进行串口通信的时候如何发送超过8位位宽的数据,串口数据位设置的8位,是不是最大只能发255,想
    发表于 12-23 16:59

    单片机串口设置

    我想的,只要把单片机上面的串口参数和虚拟里面对串口的参数设置相同,他们就可以通信了。具体的我是这样做的。这是虚拟
    发表于 01-13 07:40

    单片机串口通信乱码怎么解决

    单片机串口通信乱码问题问题:测试51单片机串口通信时,设置主程序为单片机将接收到的数据发送出去,
    发表于 02-18 06:34

    什么是单片机串口通信?

    串口通信是单片机一个重要的部分,单片机和PC,单片机单片机之间的通信大都用串口
    发表于 07-25 07:36 6.1w次阅读
    什么是<b class='flag-5'>单片机</b>的<b class='flag-5'>串口</b>通信?

    使用51单片机进行串口通信的串口设置资料免费下载

    本文档的主要内容使用51单片机进行串口通信的串口设置资料免费下载
    发表于 06-14 17:44 11次下载
    使用51<b class='flag-5'>单片机</b>进行<b class='flag-5'>串口</b>通信的<b class='flag-5'>串口</b><b class='flag-5'>设置</b>资料免费下载

    怎样去设置单片机串口的工作模式

    单片机串口有四种工作模式。
    的头像 发表于 10-17 16:04 4747次阅读

    51单片机串口通信

    51单片机串口通信文章目录51单片机串口通信串口介绍硬件电路电平标准常见通信接口比较相关术语51单片机
    发表于 11-18 14:06 21次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>串口</b>通信

    51单片机串口通信

    51单片机串口通信文章目录51单片机串口通信串口介绍硬件电路电平标准常见通信接口比较相关术语51单片机
    发表于 11-21 20:36 58次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>串口</b>通信

    单片机串口通信乱码问题

    单片机串口通信乱码问题问题:测试51单片机串口通信时,设置主程序为单片机将接收到的数据发送出去,
    发表于 12-23 19:05 10次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>串口</b>通信乱码问题

    单片机串口屏连接步骤指南

    单片机串口屏的连接主要涉及硬件连接和软件设置两个方面。以下是一个基本的步骤指南
    的头像 发表于 03-13 10:16 526次阅读
    <b class='flag-5'>单片机</b>与<b class='flag-5'>串口</b>屏连接步骤指南