1、判断你的串口线是否正确
2、判断你所用的串口设备是否正确
3、判断你的板子和PC之间的串口设置是否一致
还不行的话,建议用示波器进行判断:
当板子发送数据时,用示波器看看串口线上是否有波形。
把你这段代码,放到PC上(Linux OS)编译运行,让两台PC进行串口通讯。
如果没有问题那应该是板子的串口驱动程序有问题。
如果在PC上运行也有问题,再仔细查你的代码(稍微浏览了一下,没有发现明显的问题)。
在实际中的情况往往是非常多特例,比如,在用write发送数据时没有键入回车,信息就将发送不出去的情况,这主要是因为我们在输出输入时是按照 规范模式接受到回车或换行才发送,而非常多情况我们是不必回车和换行的,这时,应当转换到行方式输入,设置options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);不经处理直接发送。
又比如在我们发送字符0x0d的时候,往往接受端得到的字符是0x0a 这是怎么回事,原因是在串口设置中c_iflag和c_oflag中存在从NL-CR 和CR-NL的映射,也就是说,串口能把回车和换行看成一个字符,所以,此时我们应该屏蔽掉这些,用options.c_oflag &=~(INLCR|IGNCR|ICRNL|);和options.c_oflag &=~(ONLCR|OCRNL); 进行设置。
1,首先用超级终端测试该串口是否是通的。我曾今遇到这种情况,串口线绝对是好的。设备绝对是好的。
但是就是不同。最后找了很久才发现,原来我的开发板串口竟然没有交叉!!!RXD Txd竟然没有交叉!!
2.先不着急发送别的,先测试发送单个字符。
然后对于串口设置,设置好几就ok了。主要的问题恐怕就是设置阻塞那一段属性需要你自己去式。其他没什么
困难的了
我也用过这段代码,也是无法通信,后来网上查了下,在set_Parity的设置options的设置改成如下就可以了
options.c_cflag |= CLOCAL | CREAD;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag &= ~OPOST;
options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); int set_Parity(int ai_com,uchar ai_databits,uchar ai_stopbits,uchar ai_parity)
{
struct termios options;
if ( tcgetattr( ai_com,&options) != 0)
{
return ERROR_LOAD_COMINFO;
}
options.c_cflag |= CLOCAL | CREAD;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_ofl
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页