最近测试涉及到底层串口代码的修改。经过这次修改,突然发现其实自己对于串口的一些特性以前并不是十分清楚。
首先遇到的一些问题:
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的巢穴。
关键字:单片机 串口设置
引用地址:
最近遇到的单片机串口设置问题
推荐阅读最新更新时间:2024-03-16 16:17
基于AVR单片机的便携式无线医疗点滴监控系统
引言 智能化和便携式是现代电子产品的发展趋势,医疗电子的智能化使得医务人员的操作变得更方便。医务人员可随身携带手持式监控仪对各病房点滴实时监控,及时了解相关情况;如遇突发情况如点滴低于设定警戒值,终端监控装置可产生中断信号,主控制端则可优先进行相应的处理。本设计实现了一种以AT32UC3A0512[1]单片机为主控制器的便携式远程无线点滴监控系统,可及时了解点滴状态,提高医疗点滴设备安全性。 1 系统原理介绍 本系统主要包括两个部分:手持式控制端和终端监控装置。手持式控制端主要实现信息输入和查询界面的操作,通过输入待查询的病房号及点滴速度值,以数据包形式发送给相应的病房监控终端,实时显示终端传送来的点滴状态数据
[单片机]
单片机控制摩托点火器的设计理念
点火系统在汽油机中起着非常重要的作用,点火能量必须按规定要求足够大,否则就不能点燃气缸内的混合气;点火时刻或点火提前角是影响发动机性能的重要参数之一,每个给定的发动机运行工况都对应着一个最佳点火提前角,过早或过迟点火,都会直接影响到摩托车的燃油经济性和动力性。为此,通过试验获取发动机的最佳点火提前角,并控制发动机尽量按最佳时刻点火是设计关键。 目前,国外大排量的运动型摩托车已开始应用微机控制技术,日本本田、川崎、铃木公司等都有这样的车型推出,而我国在点火提前数字控制技术应用方面远远落后于发达国家。事实上,这项技术在我国生产的轿车汽油机上的应用才刚刚开始,但在摩托车汽油机上还未应用。 1、数字控制点火系统的组成 数字控制点
[单片机]
STC89C52RC单片机额外篇 | 04 - 认识头文件<intrins.h>与_nop_函数
1 intrins.h 头文件 头文件 intrins.h 在我们51单片机日常开发中经常使用,特别是_nop_()函数,以下是 intrins.h 的内容: /*-------------------------------------------------------------------------- INTRINS.H Intrinsic functions for C51. Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH All rights reserved. --------------------------------
[单片机]
51单片机控制led灯闪烁程序
Keil 写程序的过程,建立工程-- 保存工程-- 建立文件-- 添加文件到工程-- 编写程序-- 编译-- 下载程序。 #include sbit LED = P0^0; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main(){ //void 即函数类型 //以下为声明语句部分 unsigned int i = 0; //定义一个无符号整型变量 i,并赋初值 0 //以下为执行语句部分 ENLED = 0; //U3、U4 两片
[单片机]
基于单片机的多气体检测系统设计
气体传感器是一种能将气体种类及其与浓度有关的信息转换成电气信号的装置。根据这些电气信号的强弱就可以获得与待测气体在环境中存在情况有关的信息,从而可以进行检测、监控、报警。因此由气体传感器与模式识别系统构成的智能化气味识别仪器有着广泛的应用领域,如食品工业、化学工业、环境监测、医学诊断、安全检查等,越来越受到广泛关注。
传统的气体检测大多采用单气体检测方式, 即每 测量 一种气体需要一种测量仪表。用一种仪器能够进行多种气体的检测和识别是气体检测仪的发展趋势,而本设计采用酒精传感器、甲烷传感器、一氧化碳传感器等多种气体传感器组成传感器阵列,通过传感器阵列能把气体中的特定成分检测出来,并将其转化为电信号,然后采用ADC080
[电源管理]
一种51单片机虚拟实验室的建立方法
0 引 言 单片机的学习是一个实践性很强的过程,目前的单片机实验室基本采用硬件仿真设备搭建,受资金和场地的限制,单片机实验室配置的灵活性和完整性受到一定的限制。针对这些问题,在此提出一种建立基于个人PC和各种软件的单片机个人虚拟实验室方案。所谓“虚拟实验室”,就是将计算机上的各种虚拟仪器,按实验要求和设计原理,虚拟出与现实相同的实验系统,进而在这个系统上完成整个实验。与传统实验模式相比,虚拟实验具有比较明显的优势,例如,涉及的实验内容全面,硬件投入少,学生可自行实验,实验过程中损耗小,与工程实践最为接近等。一般的虚拟实验室仅包含单片机系统的调试,本文在此基础上又加入了与上位机的联合调试。 在此,以使用VB通过RS 232串
[单片机]
德州仪器推出业界最高双核MCU C2000
德州仪器推出业界最高性能双核 MCU C2000 Delfino F2837xD 系列,重新定义高级工业应用的MCU性能 最新32位MCU不仅可显著提高系统执行性能,而且还在单个芯片中集成了差异化模拟功能,从而支持高级伺服驱动器、太阳能中央逆变器以及工业 UPS 日前,德州仪器 (TI) 宣布推出F2837x系列的最新 C2000™ Delfino™ 32 位 F2837xD 微控制器 (MCU),为工业实时控制实现最新创新,并设定了全新性能标准。这些最新 MCU 支持双核 C28x 处理功能与双实时控制加速器(也称为控制律加速器或 CLA),可提供 800 MIPS 浮点性能,从而可帮助设计人员为计算要求严格的控制应用开发低
[单片机]
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]