• 8968阅读
  • 3回复

[提问]串口通信问题 [复制链接]

上一主题 下一主题
离线yong27
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-09
//串口发送数据
...
fd = openSerial();
....
void GLOBAL_SerialPortSend(QString buf)
{
    int count = buf.length();
    ::write(fd,buf,count);
}
这是串口发送数据的一个函数,当快速调用这个函数发送字符时会出错!!慢点不会错
问题出在哪里?怎么才能知道写入fd的buf数据发完了没有,我想有可能是上一次的数据还没发完,下一次的又来了,造成前后覆盖出错了
离线uidab

只看该作者 1楼 发表于: 2011-03-10
回 楼主(yong27) 的帖子
串口发送有波特率要求。也就是速度。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线yong27
只看该作者 2楼 发表于: 2011-03-10
    const char *devName = "/dev/ttySAC2";//开发板
    fd = ::open(devName,O_RDWR|O_NONBLOCK);
    if(fd < 0) return -1;

    termios serialAttr;
    memset(&serialAttr,0,sizeof(serialAttr));
    serialAttr.c_iflag = IGNPAR;
    serialAttr.c_cflag = B9600|CS8|CREAD|CLOCAL;
    serialAttr.c_cc[VMIN] = 1;
    if(tcsetattr(fd,TCSANOW,&serialAttr) != 0) return -1;
    return fd;

波特率我都配置好了,关键是怎么知道缓冲区的数据发完了没有
离线uidab

只看该作者 3楼 发表于: 2011-03-14
查查文档,应该有“忙”---busy标志。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个