当前位置: 技术问答>linux和unix
linux下面的串口通讯,为什么里面有多余字符
来源: 互联网 发布时间:2015-08-21
本文导语: 我用cat filename > /dev/ttyS0,程序可以收到数据,但是为什么里面会有一些多余的符号出来,这些符号在filename里面是没有的,怎么解决?谢谢 main.c: #include #include "communication.h" int main(void) { int fd; int nread; ...
我用cat filename > /dev/ttyS0,程序可以收到数据,但是为什么里面会有一些多余的符号出来,这些符号在filename里面是没有的,怎么解决?谢谢
main.c:
#include
#include "communication.h"
int main(void)
{
int fd;
int nread;
char buff[1024] = "";
char* dev = "/dev/ttyS1";
fd = open_dev(dev);
if (fd>0) set_speed(fd, 115200);
else
{
printf("Can't open serial port!n");
exit(0);
}
if (-1 == set_parity(fd, 8, 1, 'N'))
{
printf("Set parity error.n");
exit(1);
}
while(1)
{
while((nread = read(fd, buff, 1023))>0)
{
buff[nread+1]='';
printf("%s", buff);
}
}
close(fd);
return EXIT_SUCCESS;
}
communication.h:
#ifndef _COMMUNICATION_H
#define _COMMUNICATION_H
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef __cplusplus
extern "C"
{
#endif
extern int speed_arr[];
extern int name_arr[];
int open_dev(char* dev);
void set_speed(int fd, int speed);
int set_parity(int fd, int databits, int stopbits, int parity);
#ifdef __cplusplus
}
#endif
#endif /* _COMMUNICATION_H */
main.c:
#include
#include "communication.h"
int main(void)
{
int fd;
int nread;
char buff[1024] = "";
char* dev = "/dev/ttyS1";
fd = open_dev(dev);
if (fd>0) set_speed(fd, 115200);
else
{
printf("Can't open serial port!n");
exit(0);
}
if (-1 == set_parity(fd, 8, 1, 'N'))
{
printf("Set parity error.n");
exit(1);
}
while(1)
{
while((nread = read(fd, buff, 1023))>0)
{
buff[nread+1]='';
printf("%s", buff);
}
}
close(fd);
return EXIT_SUCCESS;
}
communication.h:
#ifndef _COMMUNICATION_H
#define _COMMUNICATION_H
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef __cplusplus
extern "C"
{
#endif
extern int speed_arr[];
extern int name_arr[];
int open_dev(char* dev);
void set_speed(int fd, int speed);
int set_parity(int fd, int databits, int stopbits, int parity);
#ifdef __cplusplus
}
#endif
#endif /* _COMMUNICATION_H */
|
你可以用root登录,stty -F /dev/ttyS0 看它的速率。
|
set_speed(fd, 115200);
有问题吗?
有问题吗?
|
什么样的多余字符?
另外,你设置奇偶校验位了吗?
另外,你设置奇偶校验位了吗?
|
建议读完之后用:
tcflush(fd,TCIFLUSH); //clear serial online data
tcflush(fd,TCIFLUSH); //clear serial online data
|
应该不会有这种问题,只要两边的所有参数设置一致,就可以了。