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

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

3天内不再提示

什么是串口通讯?串口通讯的通讯协议技术详解

深圳市科瑞特自动化技术有限公司 2023-07-31 17:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、什么是串口通讯?

串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。

典型的串口通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,所以端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶的校验。对于两个需要进行串口通信的端口,这些参数必须匹配,这也是能够实现串口通讯的前提。

b1afae68-2f81-11ee-bbcf-dac502259ad0.png图1:串行通讯示数据传输意图

二、串口通讯的通讯协议?

最初数据是模拟信号输出简单过程量,后来仪表接口出现了RS232接口,这种接口可以实现点对点的通信方式,但这种方式不能实现联网功能,这就促生了RS485

我们知道串口通信的数据传输都是0和1,在单总线、I2CUART中都是通过一根线的高低电平来判断逻辑1或者逻辑0,但这种信号线的GND再与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱。所以差分通信、支持多机通信、抗干扰强的RS485就被广泛的使用了。

RS485通信最大特点就是传输速度可以达到10Mb/s以上,传输距离可以达到3000米左右。大家需要注意的是虽然485最大速度和最大传输距离都很大,但是传输的速度是会随距离的增加而变慢的,所以两者是不可以兼得的。

三、串口通讯的物理层

串口通讯的物理层有很多标准,例如上面提到的,我们主要讲解RS-232标准,RS-232标准主要规定了信号的用途、通讯接口以及信号的电平标准。

b1cfb97e-2f81-11ee-bbcf-dac502259ad0.png

在上面的通讯方式中,两个通讯设备的"DB9接口"之间通过串口信号线建立起连接,串口信号线中使用"RS-232标准"传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个"电平转换芯片"转换成控制器能识别的"TTL校准"的电平信号,才能实现通讯。

下图为DB9标准串口通讯接口:

b2054b48-2f81-11ee-bbcf-dac502259ad0.png

DB9引脚说明:

b23771cc-2f81-11ee-bbcf-dac502259ad0.png

上表中的是计算机端的DB9公头标准接法,由于两个通讯设备之间的收发信号(RXD与TXD)应交叉相连,所以调制调解器端的DB9母头的收发信号接法一般与公头的相反,两个设备之间连接时,只要使用"直通型"的串口线连接起来即可。

b26f7202-2f81-11ee-bbcf-dac502259ad0.png

串口线中的RTS、CTS、DSR、DTR及DCD信号,使用逻辑 1表示信号有效,逻辑0表示信号无效。例如,当计算机端控制DTR信号线表示为逻辑1时,它是为了告知远端的调制调解器,本机已准备好接收数据,0则表示还没准备就绪。

四、波特率

波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示;

b2978ecc-2f81-11ee-bbcf-dac502259ad0.png

比如波特率为9600bps;代表的就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。

因此,那么每1bit的时间就是1/9600秒=104.1666...us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。两台设备要想实现串口通讯,这收发端设置的波特率必须相同,否则是没办法实现通讯的。

收发波特率一致可以实现通讯:b2ab9fac-2f81-11ee-bbcf-dac502259ad0.gif

收发波特率不一致,导致RX端不能正常接收:b2ce7324-2f81-11ee-bbcf-dac502259ad0.gif

五、串口通讯的数据结构

b2e812de-2f81-11ee-bbcf-dac502259ad0.png

起始位:起始位必须是持续一个比特时间的逻辑0电平,标志传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。

数据位:数据位紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定。传输数据时先传送字符的低位,后传送字符的高位。

奇偶校验位:奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。

停止位:停止位可以是是1位、1.5位或2位,可以由软件设定。它一定是逻辑1电平,标志着传输一个字符的结束。

空闲位:空闲位是指从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,必须由高电平来填充。

六、单双工通讯

单工:数据传输只支持数据在一个方向上传输;

半双工:允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口;

全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工方式的结合,需要独立的接收端和发送端。b31089da-2f81-11ee-bbcf-dac502259ad0.png

七、STM32中的串口通讯

STM32串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器),对于大容量STM32F10x系列芯片,分别由3个USART和两个UART。

b340a688-2f81-11ee-bbcf-dac502259ad0.png

TXD:数据发送引脚;RXD:数据输入引脚

对于两芯片的间的连接,两个芯片GND共地,同时TXD和RXD交叉连接,这样两个芯片间可进行TTL电平通信。

但如果对于芯片和PC机相连,除了共地条件外,不能使用如上的直接交叉连接,虽然两者都有TXD和RXD引脚,但通常PC机使用的是RS232接口(9针),通常是TXC和RXD经过电平转换得到,故如果要使芯片与PC机的RS232接口直接通信,需要将芯片的输入输出端口也电平转换为RS232类型,再交叉连接,二者的电平标准不同:

单片机的点评标准(TTL电平):+5V表示1,0V表示0;

RS232电平标准:+15/+13V表示0,-15/-13表示1。

b1cfb97e-2f81-11ee-bbcf-dac502259ad0.png

因此单片机与PC机进行串口通信应该遵循:在单片机串口与上位机给出的RS232口之间,通过电平转换电路实现TTL电平与RS232电平间的转换.

如果使用USB转串口也可以实现串口通讯,USB转串口电路图如下所示

b38cc860-2f81-11ee-bbcf-dac502259ad0.png

STM32串口通讯代码

STM32中串口通讯已经给大家建好了相应的库函数,大家在使用和配置串口的时候直接进行调用库函数和配置就行了,请大家参照一下代码:

1、初始化结构体代码

typedefstruct{ uint32_tUSART_BaudRate;//波特率 uint16_tUSART_WordLength;//字长 uint16_tUSART_StopBits;//停止位 uint16_tUSART_Parity;//校验位 uint16_tUSART_Mode;//USART模式 uint16_tUSART_HardwareFlowControl;//硬件流控制 }USART_InitTypeDef;

2、NVIC配置中断优先级

NVIC_Configuration(void) { NVIC_InitTypeDefNVIC_InitStructure; /*嵌套向量中断控制器组选择*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /*配置USART为中断源*/ NVIC_InitStructure.NVIC_IRQChannel=DEBUG_USART_IRQ; /*抢断优先级*/ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; /*子优先级*/ NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; /*使能中断*/ NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; /*初始化配置NVIC*/ NVIC_Init(&NVIC_InitStructure); }

3、USART配置函数

void DEBUG_USART_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; /*第一步:初始化GPIO */ //打开串口GPIO的时钟 DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE); //将USART Tx的GPIO配置为推挽复用模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure); //将USART Rx的GPIO配置为浮空输入模式 GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure); /*第二步:配置串口的初始化结构体*/ //打开串口外设的时钟 DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE); //配置串口的工作参数 //配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; //配置针数据字长 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //配置停止位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //配置校验位 USART_InitStructure.USART_Parity = USART_Parity_No ; //配置硬件流控制 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //配置工作模式,收发一起 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //完成串口的初始化配置 USART_Init(DEBUG_USARTx, &USART_InitStructure); /*--------------------------------------------------------*/ //串口中断优先级配置 NVIC_Configuration(); //使能串口接收中断 USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE); /*--------------------------------------------------------*/ /*第三步:使能串口*/ //使能串口 USART_Cmd(DEBUG_USARTx, ENABLE); }

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

    关注

    2

    文章

    616

    浏览量

    40841
  • 通讯
    +关注

    关注

    9

    文章

    941

    浏览量

    36363
  • 串口
    +关注

    关注

    15

    文章

    1607

    浏览量

    81952
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    串口通信协议简介

    串口通讯(SerialCommunication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该
    的头像 发表于 10-17 09:39 2735次阅读
    <b class='flag-5'>串口</b>通信<b class='flag-5'>协议</b>简介

    串口到底是个啥?#串口通讯 #电路知识 #RS485 #工业以太网

    串口通讯
    西安阿尔泰电子科技发展有限公司
    发布于 :2025年10月16日 18:02:50

    通用MCU语音芯片支持串口+AT指令485通讯

    文档简单介绍AD24N的性能参数、串口通讯指令、应用方向、等内容
    的头像 发表于 07-24 11:35 492次阅读
    通用MCU语音芯片支持<b class='flag-5'>串口</b>+AT指令485<b class='flag-5'>通讯</b>

    PLC之间跨区域通讯!无线通讯方案全解析

    。 在这种情况下,可以给PLC配备相应的无线通讯模块来实现 PLC与PLC无线通讯串口无线通讯模块和以太网无线通讯模块,都可以妥善地实现
    的头像 发表于 07-21 16:57 558次阅读
    PLC之间跨区域<b class='flag-5'>通讯</b>!无线<b class='flag-5'>通讯</b>方案全解析

    第十四章 USART——串口通讯

    本章介绍了USART串口通讯,含物理层(RS-232、TTL电平)、协议层(波特率、数据帧),及W55MH32的USART功能与应用。
    的头像 发表于 06-14 16:30 1523次阅读
    第十四章 USART——<b class='flag-5'>串口</b><b class='flag-5'>通讯</b>

    OLED彩屏,RS232串口通讯,IPS全视角,户外强光下可视,超宽温工作,-40℃~+80℃

    串口通讯
    深圳市乾思迪电子科技有限公司
    发布于 :2025年04月18日 10:20:41

    12864点阵工业级智能单色液晶屏,TTL/RS232工业串口通讯 接口少,仅需1线即可通讯(电源线除外)画点

    串口通讯
    深圳市乾思迪电子科技有限公司
    发布于 :2025年04月18日 10:17:19

    单端信号与差分信号的区别#单端信号 #差分信号 #串口通讯 #RS232 #RS485

    串口通讯
    安泰小课堂
    发布于 :2025年04月10日 18:02:00

    高品质超溥 132*64液晶显示模块 图形点阵 2.4寸 绿底黑字 STN正显 SPI串口通讯 防静电抗干扰

    串口通讯
    深圳市乾思迪电子科技有限公司
    发布于 :2025年03月21日 12:02:40

    Labview串口通讯,使用SerialPort

    ,上面的例子只是完成了串口对接,并未制作与通讯协议,比较连接PLC,会涉及到通讯协议如ModBusRTU等。各种长各样的
    发表于 03-08 18:38

    串口通讯隔离器的定义与作用

      在现代工业自动化、通信系统和嵌入式设备中,串口通讯(Serial Communication)是一种常见的数据传输方式。由于其简单、可靠且成本低廉,串口通讯被广泛应用于各种设备之间
    的头像 发表于 02-06 16:01 2067次阅读

    一文解读MCU与电脑的通讯方式-串口

    你这个小板子和电脑通讯,做个上位机,最常用的接口是什么?我想大家闭眼说-串口串口是什么? 串行接口(Serial port),也称串行接口或串行端口,串行通信接口,COM接口,简称串口
    的头像 发表于 01-13 09:36 1825次阅读
    一文解读MCU与电脑的<b class='flag-5'>通讯</b>方式-<b class='flag-5'>串口</b>

    安科瑞AWT100-DP 无线通讯终端,支持串口MODBUS RTU协议

    产品简介 功能:■支持串口MODBUS RTU协议的数据采集,并通过安科瑞平台协议与安科瑞服务器通讯。 ■支持多30个MODBUS RTU设备的数据采集。 ■支持对每个MODBUS设备
    的头像 发表于 01-02 10:40 700次阅读
    安科瑞AWT100-DP 无线<b class='flag-5'>通讯</b>终端,支持<b class='flag-5'>串口</b>MODBUS RTU<b class='flag-5'>协议</b>

    受电端PD快充协议芯片,支持全协议,支持UART串口通讯协议

    串口通讯协议芯片,这不但使产品的成本增高,也占据了PCB板空间。汇铭达XSP16作为一款既支持快充功能又支持通过UART串口通讯的受电端诱
    的头像 发表于 12-26 16:13 1348次阅读
    受电端PD快充<b class='flag-5'>协议</b>芯片,支持全<b class='flag-5'>协议</b>,支持UART<b class='flag-5'>串口</b><b class='flag-5'>通讯</b><b class='flag-5'>协议</b>