linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写

linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写

ID:38581115

大小:191.00 KB

页数:25页

时间:2019-06-15

linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写_第1页
linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写_第2页
linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写_第3页
linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写_第4页
linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写_第5页
资源描述:

《linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写一、前言1.1关于串口测试工具,网上已经有集成好的应用程序提供大家使用,但其只提供功能接口,内部具体怎么实现的还需要自己去探索;1.2关于串口通信的测试程序在网上已经是数见不鲜,但也不排除很多是直接“参考”别人的(ctrl+c),而且很多代码没有相关注释,从而某些细节性的问题就被忽略;1.3本例程序不需全部读完,分为3大部分,设置通信协议、读写字符串函数编写、通信的测试函数,测试函数自己选取看两个典型的就OK;如果哪有说的有误,希望大家指正,多交流共同

2、进步;1.4要点:①本文提供了设置串口通讯的接口,方便大家对程序的复用,感觉还是面向对象的语言更方便呀;②在给模块发送指令后需要读取模块返回的数据时,保险起见采用阻塞式读取,且串口一次只能读取8位byte数据,注意读取数据的调用函数;③注意在读写命令中存在0x00(零)的16进制的数据时的方式;④通信成功,但恰遇到模块总返回操作失败的代码的问题。二、串口测试程序的实现2.1要实现串口通信的操作,首先是找到需要操作的对象,即具体的串口设备,一般都在Linux嵌入式设备的/dev/路径下有很多串口设备,找到自己所要操作的串口设备,例如本

3、例程所操作的是/dev/ttySAC0,ttySAC0为串口设备名称;2.2模块的串口通信协议,不同的模块之间有细微差别,自己作相应的改动就好。本例程的通信协议:波特率9600bps,8位数据位,1位起始位,一位停止位,无奇偶校验。通信成功时,返回的是操作成功或者操作失败的代码,PS:操作失败并不是说的是通信失败,因为去访问模块时,模块给了应答,表明通信是成功的,只能说明是硬件本身操作失败。发送的指令中存在CS,其值为0减去前面CS前面所有16进制的相加-例:80060501CS,CS为:0-(80+06+05+01)=74,即需要

4、发送的代码为8006050174;2.3源码如下:#include#include#include#include#include#include#include#include#include#defineTRUE1#defineFALSE-1#defineBUFF_MAXSIZE2048#defineFREQUENCY_000//设定的频率为0#

5、defineFREQUENCY_055//设定的频率为5#defineFREQUENCY_1010//设定的频率为10#defineFREQUENCY_2020//设定的频率为20#defineRESOLUTION_ONE_MM1//1表示选择设定的分辨率为1mm#defineRESOLUTION_Z_P_ONE_MM2//2表示选择设定的分辨率为0.1mm#defineMEASURING_POWER_ON1//1表示上电即测开启#defineMEASURING_POWER_OFF0//0表示上电即测关闭typedefunsigne

6、dcharun_char;//初始化设置,即设置通信协议intOpenDev(char*dev);//打开串口设备文件intset_speed(intfd,intspeed,structtermios*newtio);//设置波特率intSet_Parity(intfd,intdatabits,intstopbits,intparity);//设置数据位、停止位、校验位//数据读写函数intWrite_Data(intfd,void*buf,intlen);//发送命令代码函数intRead_Data(intfd,char*buff

7、);//接收命令代码函数//模块的功能函数intOpen_LaserModule(intfd);//模块的打开intClose_LaserModule(intfd);//模块的关闭intSet_Address(intfd);//设置地址un_char*Read_Parameter(intfd,un_char*device_parameter);//读取参数un_char*Read_Device_Num(intfd,un_char*device_num);//读取机器号intDistance_Modification(intfd,in

8、tdecrease_or_increase,intdistance_int);//距离修改,参数decrease_or_increase表示修正可选为取负或者取正,参数distance表示要修正的距离intMea_Interval(i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。