一种简单的 Linux 下 C 语言串口驱动程序介绍
小而美 wu 俊刚
Linux 下的 C 语言串口驱动,《嵌入式 Linux 应用程序开发详解》这本书的第 6 章“文件
I/O 编程”已经进行了详细的讲解,此处不再赘述。本驱动在此基础上将串口驱动封装成
App_serialport.c 和 App_serialport.h 两个文件,以便主程序调用。
本驱动的主要特点是使用了最简单的方式实现了异步发送接收 api 接口,没有使用线程
加上 select 监测的方式,故本驱动使用简单。另外,本驱动将串口驱动的所有可配置项都移
到 App_serialport.h 文件中了,故本驱动在不同 Linux 系统上使用时只需修改 App_serialport.h
中的配置项即可。
所有的配置项都在 App_serialport.h 文件中。其中:
COM_PORT_DEV_NAME_LIST 宏 定 义 列 出 所 有 串 口 设 备 的 名 称 , 比 如 , 串 口 1 对 应
"/dev/ttyS0",串口 2 对应"/dev/ttyS1",串口 3 对应"/dev/ttyS2",依次类推。当然,每种 Linux
系统下,串口设备的名称可能不相同,这就需要根据系统中的实际名称进行相应修改。
RECV_FRAME_TIME_INTERVAL 宏定义表示两个相邻接收帧之间的最小时间间隔,以毫秒为单
位,该值需要根据实际通信协议进行设置。modbus 通信协议在 9600 波特率时,接收帧间
隔经常设置为 5ms。
drv_uart_send 和 drv_uart_recv 两个函数是简化的方便单串口操作的接口函数,在调用
drv_uart_init 函数时将打开的串口文件描述符用内部变量保存了起来。drv_uart_send 和
drv_uart_recv 调用内部变量来直接操作,便于调用。
源代码里有 demo 例程,demo 例程实现的功能是:循环监测串口是否有接收字符串,
如果有,则将字符串第一个字符加 1 发送回去。源代码下载地址为:
https://pan.baidu.com/s/1qYkh2Hm
(全文完)