linux串口发送
⑴ linux串口相关的操作及绑定
@ toc
可在控制台输入
也可以用stty设置串口参数
使用后相当于串口回传,发什么回什么
发送数据
可以对串口发送数据比如对com1口
一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;
如果有ttyS设备,再看/dev/有没有ttyS*,如没有就建立一个:
如果板子的设备中没有标准串口设备ttyS0,也没有ttySAC0。/dev下应该有一个USB串口:/dev/ttyUSB0.
当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),这完成看原已内建的串口数目。ttyS*设备会被报告在/var/run/stab内。
PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC
可能是linux下的串口设备没有打开,需要改变串口设备
的权限,或者根据文章头添加用户到组处理
可以通过以下命令 查看 板子上的硬件端口的内核设备名
该条命令会将 ttyUSB0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0
cmd.sh如下:
./getUSB.py 调用当前路径下的getUSB.py这个Python语言,明确此次是哪个,ttyUSB0,或者ttyUSB1挂载在端口3-1.1上
getUSB.py:
完成之后 ,设置开机启动cmd.sh(在/etc/rc.local中设置)则每次开机之后,会从/dev/ttydata获取到固定端口的数据
方式一
写入内容如下:
方式二
我的硬件序列号:ATTRS{serial}=="FTSYWCXZ"这个号是唯一的
可以通过/dev/usb_0打开串口设备
常用的匹配类型:
⑵ 如何在linux下调试串口,发送十六进制数据
串口发送的数据是8位的,最大为255,就是FF,如果要发送大于255的数,必须变成几个字节发送,例如要发送十进制2315,就要将数据拆分 data(0)=2315/256; data(1)=2315%256; 这样就拆分开数据,再将数据发送出去。
⑶ linux c 串口 收发数据
1、接受数据一般是阻塞,就是没有接收到数据就一直等待,可以设置为不阻塞,这样就可以了
2、另一种方法是,创建线程,一收、一发,就可以互不影响
⑷ 请教,怎么向linux下串口发送16进制数比如0xFA之类的
在程序中打开你的串口设备,int fd; fd = open("/dev/ttyS1",O_RDWD);
比如你要发送0x01,0x02,0x03,0x04,
char buf[256]={0x01,0x02,0x03,0x04};
write(fd,buf,4);
直接往你的串口写四个字节的数就可以了,在你的另一个程序中读取你往串口写的那几个数,十六进制打印出来就可以了。
⑸ 求助:Linux下C语言如何向串口发送16进制数据
Linux特点是所有都是文件
包括串口设备
首先 找到你串口对应的设备 一般是 /dev/ttyS1
当然 也可能是别的 需要你自己确认硬件。
然后比如你要发送0x01,0x02,0x03,0x04,
intfd;fd=open("/dev/ttyS1",O_RDWD);
charbuf[256]={0x01,0x02,0x03,0x04};
write(fd,buf,4);
close(fd);
这样就可以了。
⑹ linux串口收到数据和windows串口收到的不一样
你好,中文乱码的话,注意接收后可能需要编码转换,比如GB2312,utf8,unicode这几种编码格式的转换
如果不是中文的话,可以按照下面方式进行检查
1、具体检查方法,将linux中的发送和接受进行短接(就是将发送和接受连起来),看看接受的数据是否相同。
这一步中,因为使用的是同一个串口,所以串口的设置一定是相同的。这样如果都收不正确,可以确定是linux串口驱动的问题。
2、详细设置linux串口的参数,包括波特率,校验,串口位数。将linux和单片机设置相同,看看接受数据是否相同
如果还是不相同。
3、在windows中使用串口调试助手设置同单片机串口相同的参数,查看接受数据是否正确。
如果不正确,说明是单片机串口参数设置的问题,或者是时钟频率的问题。
如果正确,说明一定是linux端的问题。
如果是linux端的问题,主要从两个方面解决,一个是参数设置,一个是信息读取。下面是测试方法。
4linux端查看一下代码设置。利用驱动接口,读出串口的参数,看看和你程序中设置的参数是否相同,如果不相同说明设置参数的代码没写对。
5如果参数设置是正确的,那么直接cat 驱动的位置,可以直接读出串口的数据,此时读取的数据应该是和发送端一样的,如若不一样。。。。那么基本就是linux时钟的问题导致的了。若linux是PC上的一般不会出现时钟设置错误,如果linux是嵌入式上的话,你看看时钟配置是否正确吧