串口通信编程.md

本文详细介绍了串口通信的基本概念,包括串口是什么、串行通信的工作原理,以及异步传输的数据格式。接着,探讨了RS-232-C标准的电平规定和波特率设置。在Linux环境下,串口被视作文件,通过open()函数进行操作。在Qt编程中,介绍了如何使用QextSerialPort库进行串口通信,包括设置、读写和解决乱码问题的方法。无论是Linux还是Windows,都需要关注串口的设置和读写流程,以及在不同平台下的差异。
摘要由CSDN通过智能技术生成
概念性知识
  • 1.什么是串口?
    串口是计算机一种常用的接口,常用串口是RS232接口,RS232事实上有三种(A,B,C),不同类别分别采用不同的电压表示on和off,使用最广泛的是RS-232-C,对应的有RS-232-C标准,也是串行通信的一个物理标准。
    Windows操作系统下,串口名为COM1、COM2……
    Linux操作系统下,串口设备文件名为/dev/ttyS0、/dev/ttyS1….注:USB/RS-232转换器名为/dev/ttyUSB0
  • 2.什么是串行通信?
    串行通信是指数据用一根传输线被逐位顺序传送,串行通信分为同步通信和异步通信,常用的是异步通信。同步通信的传输速率比异步通信更快,但大部分RS-232硬件却不支持同步通信,因为同步通信还需要其他的硬件和软件,而且传输过程中,发送设备和接收设备必须保持完全同步。
    异步通信是指一帧字符用起始位和停止位来完成收发同步
    异步传输数据格式:

这里写图片描述

一帧字符以起始位开始,然后是数据位、奇偶校验位、停止位。(这些数据在串口编程时,需要自己设置,即收发双方约定一致的协议)
数据位为5~8位,从最低位开始传送;
奇偶校验位:奇校验,偶校验,无校验三种方式;
停止位:可以是1位,1.5位,2位,其中,1.5位一般用不到。
- 3.串口通信协议
协议包括:收发双方的同步方式、传输控制步骤、差错检验方式、传输速率、报文格式等。
RS-232-C标准:RS-232-C标准对两个方面作了规定,即信号电平标准和控制信号线的定义。RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平也不兼容,RS-232-C将-5V~-15V规定为“1”,+5V~+15V规定为“0”。图1是TTL标准和RS-232-C标准之间的电平转换。
波特率:每秒传输数据的位数,标准波特率系列为110、300、600、1200、4800、9600和19200。可以同过编程来设置 接口的接受波特率和发送波特率,收发双方的波特率设置应该一致。
数据位:5~8位,一般设置为8位
奇偶校验位:奇校验、偶校验、无校验
停止位:1位,2位,1.5位;

Linux下串口编程

记住:Linux下皆为文件
串口编程流程:

这里写图片描述
包含头文件:

#include<iostream>
#include<stdlib.h>            //标准函数库定义
#include<unistd.h>          //Unix标准函数定义
#include<sys/types.h>      //基本系统数据类型
#include<sys/stat.h>        //文件状态定义
#include<fcntl.h>            //文件控制定义
#include<errno.h>          //错误号定义

其余头文件根据编程所需,自行添加。
- 1.打开串口
串口设备通过串口终端设备文件访问,文件为:/dev/ttyS0,/dev/ttyS1…;
Tips:查看当前Linux系统连接的所有串口,可以使用命令行:ls -a /dev/tty*(或ls -a /dev/ttyUSB*)
以打开文件的方式打开串口设备,调用open()函数:fd=open(port,O_RDWR|O_NOCTTY|O_NDELAY);
参数O_NOCTTY:表示打开一个终端设备,程序不会成为该终端的控制终端;
参数O_NDELAY:表示不关心端口另一端是否激活;
- 2.设置串口
最基本的设置串口包括:波特率、数据位、奇偶校验位、停止位
主要是设置struct termios结构体的各成员值

struct termio
{    unsigned short  c_iflag;    /* 输入模式标志 */    
    unsigned short  c_oflag;        /* 输出模式标志 */    
    unsigned short  c_cflag;        /* 控制模式标志*/    
    unsigned short  c_lflag;        /* local mode flags */    
    unsigned char  c_line;            /* line discipline */    
    unsigned char  c_cc[NCC];    /* control characters */
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值