当前位置: 技术问答>linux和unix
linux下串口收发程序, 帮忙给挑一下错
来源: 互联网 发布时间:2016-10-01
本文导语: 发送: # include # include # include # include # include # include # define BAUDRATE B9600 # define COM "/dev/ttyS0" # define _POSIX_SOURCE 1 # define FALSE 0 # define TRUE 1 volatile int STOP=FALSE; main() { int fd,res; struct termios oldtio,n...
发送:
# include
# include
# include
# include
# include
# include
# define BAUDRATE B9600
# define COM "/dev/ttyS0"
# define _POSIX_SOURCE 1
# define FALSE 0
# define TRUE 1
volatile int STOP=FALSE;
main()
{
int fd,res;
struct termios oldtio,newtio;
char buf[255],ch;
fd=open(COM, O_RDWR | O_NOCTTY);
if (fd芯片=>串口线=>芯片=& gt;驱动程序=>应用程序
2、数据最后都被变成方波在串口线上传播。
-------------------------------
所以调试程序时,一般过程是:
1、先看串口线或者DB针脚上有没有数据,这个可以解决掉大多数的硬件问题(包括连接问题和线的问题)而且故障定位速度很快。
2、串口线上有数据的情况下,一般硬件没问题。这时有两种情况:
2.1、如果串口驱动没有改写过的话,那么应用程序一般都能收到一些数据,只不过可能是乱码。如果是乱码的话,则基本是应用程序的串口配置部分有问题。
2.2、如果串口驱动改写过的话,如果应用程序不能收到数据则可能是驱动程序中串口初始化没有做好。如果应用程序能收到数据但是乱码的话,则可能是驱动程序中串口初始化有问题也可能是应用程序的串口配置部分有问题。
3、至于有些串口设备没有反应的问题,也是基于这个思路来分析。在排除了硬件问题后,最大的可能就是服务程序没有运行或者反馈。
# include
# include
# include
# include
# include
# include
# define BAUDRATE B9600
# define COM "/dev/ttyS0"
# define _POSIX_SOURCE 1
# define FALSE 0
# define TRUE 1
volatile int STOP=FALSE;
main()
{
int fd,res;
struct termios oldtio,newtio;
char buf[255],ch;
fd=open(COM, O_RDWR | O_NOCTTY);
if (fd芯片=>串口线=>芯片=& gt;驱动程序=>应用程序
2、数据最后都被变成方波在串口线上传播。
-------------------------------
所以调试程序时,一般过程是:
1、先看串口线或者DB针脚上有没有数据,这个可以解决掉大多数的硬件问题(包括连接问题和线的问题)而且故障定位速度很快。
2、串口线上有数据的情况下,一般硬件没问题。这时有两种情况:
2.1、如果串口驱动没有改写过的话,那么应用程序一般都能收到一些数据,只不过可能是乱码。如果是乱码的话,则基本是应用程序的串口配置部分有问题。
2.2、如果串口驱动改写过的话,如果应用程序不能收到数据则可能是驱动程序中串口初始化没有做好。如果应用程序能收到数据但是乱码的话,则可能是驱动程序中串口初始化有问题也可能是应用程序的串口配置部分有问题。
3、至于有些串口设备没有反应的问题,也是基于这个思路来分析。在排除了硬件问题后,最大的可能就是服务程序没有运行或者反馈。
|
收不到数据检查:
1.串口线对不对,先在windows下用串口助手测试.
2.你的tty设备文件对不对.如果你的/dev下有几个tty设备文件,几个都测试下.
1.串口线对不对,先在windows下用串口助手测试.
2.你的tty设备文件对不对.如果你的/dev下有几个tty设备文件,几个都测试下.
|
1.好像没有设波特率?用到cfsetispeed和cfsetospeed了吗?
2.read之前最好等下信号ret = select(fd + 1, &fd, NULL, NULL, &tv).要不然没有数据过来read不会阻塞吧.
3.RX和TX短接可以先在同一电脑测试.
4.先用工具测试,比如minicom连windows的超级终端.
2.read之前最好等下信号ret = select(fd + 1, &fd, NULL, NULL, &tv).要不然没有数据过来read不会阻塞吧.
3.RX和TX短接可以先在同一电脑测试.
4.先用工具测试,比如minicom连windows的超级终端.