searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

串口设备功能开发的介绍

2024-05-20 08:54:43
8
0

串口是一种常见的计算机接口,用于设备之间的数据传输和通信。随着usb设备的发展,串口这一设备其传输效率和稳定性方面的缺点已经被逐渐淘汰掉,但由于串口设备传统、结构简单、成本低的特点,对于特殊领域和设备,仍有其使用价值,因此本文将简单介绍下串口的概念,已经相关基础函数。

第一部分:串口相关概念

  1. 串口的定义和作用:串口是一对数据线(发送线和接收线)组成的接口,用于计算机与外部设备之间的数据交换。它可以连接各种设备,如打印机、传感器等,实现数据的收发和通信;
  2. 串口的硬件结构:串口由发送器和接收器组成。发送器将计算机的数据转换为电信号发送出去,接收器将接收到的电信号转换为计算机可读的数据;
  3. 通信协议:包括RS-232、RS-422和RS-485等;
  4. 接口:标准的DB-9或DB-25;
  5. 常用串口设备:串口打印机(多见于小票打印机)、GPS接收器、传感器等低速通信和较老的设备;

第二部分:串口协议参数

  1. 串口通信协议:串口通信需要使用一种协议规定数据的传输格式和通信规则。常见的协议有ASCII码和Modbus等。开发串口功能时需要了解所使用的协议,并按照协议规定进行数据的解析和处理。
  2. 串口通信参数:串口通信需要设置一些参数,例如波特率、数据位、停止位和校验位等。这些参数用于控制数据传输的速度和稳定性。具体的解释:

波特率:每秒钟传输的比特数(bits per second),常见值为9600,14400,115200bps等。

数据位:传输一个字符时,该字符有效数据部分的比特数。

停止位:标志着传输一个串口字符的结束,可以是1位、2位

校验位:可以作奇校验,偶校验,1校验,0校验,无校验。

默认配置:波特率9600、数据位8位、停止位1位、无校验

      3.在串口通信中,RX(接收)和TX(发送)是串口的两个重要接口,用于数据的接收和发送。串口通信的基本原理是通过RX和TX接口在计算机和外部设备之间进行数据传输。数据发送时,计算机将数据发送到串口的发送线(TX线),外部设备通过串口的接收线(RX线)接收数据。数据接收时,外部设备将数据发送到串口的发送线(TX线),计算机通过串口的接收线(RX线)接收数据

 

第三部分:串口功能开发

编程接口:不同的操作系统和编程语言提供了各种串口编程接口,如Windows的WinAPI、Linux的termios库、Python的pySerial等。

开发者需要选择适合自己平台和语言的编程接口,并熟悉其使用方法。

 

关于串口开发主要包括:

  1. 串口数据收发,包括打开串口、设置通信参数、发送数据和接收数据等步骤。
  2. 数据解析与处理,包括解析接收到的数据,数据校验、数据转换和数据存储等操作,确保数据的准确性和可用性。
  3. 错误处理与调试,确保串口功能的稳定性和可靠性。

第四部分:串口开发常用函数

4.1 windows

在Windows系统中进行串口开发时,可以使用以下常用的API来实现串口通信:

1. CreateFile: 用于打开串口设备的函数,返回一个文件句柄,用于后续的读写操作。
   ```c
   HANDLE CreateFile(
       LPCTSTR lpFileName,
       DWORD dwDesiredAccess,
       DWORD dwShareMode,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes,
       DWORD dwCreationDisposition,
       DWORD dwFlagsAndAttributes,
       HANDLE hTemplateFile
   );
   ```

2. SetCommState: 用于设置串口的通信参数,如波特率、数据位、停止位和校验位等。
   ```c
   BOOL SetCommState(
       HANDLE hFile,
       LPDCB lpDCB
   );
   ```

3. SetCommTimeouts: 用于设置串口的超时参数,包括读取和写入操作的超时时间。
   ```c
   BOOL SetCommTimeouts(
       HANDLE hFile,
       LPCOMMTIMEOUTS lpCommTimeouts
   );
   ```

4. ReadFile: 用于从串口读取数据。
   ```c
   BOOL ReadFile(
       HANDLE hFile,
       LPVOID lpBuffer,
       DWORD nNumberOfBytesToRead,
       LPDWORD lpNumberOfBytesRead,
       LPOVERLAPPED lpOverlapped
   );
   ```

5. WriteFile: 用于向串口写入数据。
   ```c
   BOOL WriteFile(
       HANDLE hFile,
       LPCVOID lpBuffer,
       DWORD nNumberOfBytesToWrite,
       LPDWORD lpNumberOfBytesWritten,
       LPOVERLAPPED lpOverlapped
   );
   ```

6. CloseHandle: 用于关闭串口设备的文件句柄。
   ```c
   BOOL CloseHandle(
       HANDLE hObject
   );
   ```

4.2 Linux

在Linux系统上进行串口开发时,可以使用以下常用的API来实现串口通信:

1. open: 用于打开串口设备文件,返回一个文件描述符,用于后续的读写操作。
   ```c
   int open(const char *pathname, int flags);
   ```

2. ioctl: 用于设置串口的通信参数和控制操作,如波特率、数据位、停止位、校验位、流控制等。
   ```c
   int ioctl(int fd, unsigned long request, ...);
   ```

3. read: 用于从串口读取数据。
   ```c
   ssize_t read(int fd, void *buf, size_t count);
   ```

4. write: 用于向串口写入数据。
   ```c
   ssize_t write(int fd, const void *buf, size_t count);
   ```

5. close: 用于关闭串口设备的文件描述符。
   ```c
   int close(int fd);
   ```

6. tcgetattr和tcsetattr: 用于获取和设置串口的终端属性,包括波特率、数据位、停止位、校验位等。
   ```c
   int tcgetattr(int fd, struct termios *termios_p);
   int tcsetattr(int fd, int optional_actions, const struct termios *termios_p);
   ```

4.3 跨平台函数

关于串口开发相关的跨平台第三方库,目前网络上存在很多。其中比较常见的是libserialport库,可以自行搜索获取更多信息;

libserialport is a minimal, cross-platform shared library written in C that is intended to take care of the OS-specific details when writing software that uses serial ports.

It is licensed under the terms of the GNU Lesser General Public License, version 3 or later.

 

Supported operating systems:

pLinux
pMac OS X
pFreeBSD
pWindows
pAndroid

 

0条评论
0 / 1000