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

串口的基本知识

串口的基本知识

在做项目的时候是不是发现串口是最常用的通信接口,所以我自己整理了一下关于串口的一些常识性知识,方便自己学习。
          关键词:Loto虚拟示波器,串口时序,电平标准,模拟串口

    我们常说的串口按电平分类的话有两种,一种是TTL电平的串口,一种是232电平的串口。

首先我们先看一下这两种电平的区别。

TTL电平标准:输出L:  <0.8V;  H: >2.4V,输入L:  <1.2V:   H: >2.0V

TTL器件输出低电平要小于0.8V,高电平要大于2.4V,输入,低于1.2V就认为是0,高于2.0就认为是1.于是TTL电平的输入低电平的噪声容限就只有(O.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V.

RS232标准:

逻辑1的电平为-3~-15V,辑0的电平为+3~+15V,注意电平的定义反相了一次。


   然而TTL电平的串口还可以分为两种UART与USART。我们打开stm32cubeMX看到stm32F103有2个UART3个USART。在日常我们就可以说,它有5个串口,因为USART可以配置成UART


    UART与USART都是单片机上的串口通信,他们之间的区别如下:

首先从名字上看:

UART:universal asynchronous receiver and transmitter通用异步收/发器

USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器

  从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?

  其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。



     在实际的项目中用的最多的还是UART ,配置为:N, 8 ,1.波特率常用的有2400,9600,57600,115200.我们用串口来干什么呢?用过一些模块的工程师会知道,很多模块都是通过串口来控制或者通过串口透传数据的,比如gsm(2g,4g),gps,wifi,蓝牙等等,这些模块都是通过串口来控制。所以作为一个工程师,必须要搞懂串口。下面我们通过Loto虚拟示波器采集不同波特率的UART 波形:


对比理论的时序图,我们找找起始位和停止位,这个数据是多少?

有时候我们面试会考一个题目,那就是UART波特率9600的时候,它的一个bit是多长时间,这个怎么算?初学者肯定蒙了,我用串口直接就配置然后发数据就行了,从来没算过,下面我总结一下:


波特率2400:1/2400416.67*10^(-6)s=416.67us

波特率4800:1/4800208.33*10^(-6)s=208.33us

波特率9600:1/9600104.17*10^(-6)s=104.17us

波特率19200:1/1920052.08*10^(-6)s=52.08us

波特率57600:1/5760017.36*10^(-6)s=17.36us

波特率115200:1/1152008.68*10^(-6)s=8.68us


对比我们用Loto虚拟示波器采集的数据看看是不是一致呢?



我们算这个数据有什么用呢?是的!没错!就是模拟串口!当单片机串口不够用的时候项目中会用到。接下来我会分析几个论友写的代码,逐步深入理解TTL串口。


下面这个模拟串口的代码:

首先说它的发送吧,发送一个字节,先发送起始位OI_TXD = 0;  然后delay_us(BuadRate_9600);然后依次从低位开始检测Data的每一位,从而拉高拉低OI_TXD,然后延时,移位,重复8次,最后发送停止位发送完一个Data

接收的话:它是stm32开了个定时器4和一个外部中断.外部中断采到下降沿,然后定时器设置为107us中断一次,去采集一个bit,为什么是107us呢?因为此时波特率是9600,一个bit是104.17us,然后可以依次采集每个bit,直到采完一个data。(个人感觉107us不稳定)




好好学习,努力赚钱!
返回列表