当前位置:  技术问答>linux和unix

linux下怪异串口编程问题,必须先启动一次minicom后程序才能收到数据

    来源: 互联网  发布时间:2016-12-08

    本文导语:  在linux下使用C语言编写一个接收串口数据的程序,从网上找了部分代码,结合自己的一些东西编写了一个程序。但是运行之后收不到数据,于是启动minicom进行调试,发现在minicom下可以收到数据,于是关闭minicom,再次...

在linux下使用C语言编写一个接收串口数据的程序,从网上找了部分代码,结合自己的一些东西编写了一个程序。但是运行之后收不到数据,于是启动minicom进行调试,发现在minicom下可以收到数据,于是关闭minicom,再次运行程序,程序竟可以正常工作了,可以接收串口的数据了。
然后重启计算机,该问题又重复出现了,不事先启动一次minicom,程序无法收到数据。
我怀疑是我的串口接收程序没有对串口做好初始化,当minicom启动时,minicom对串口做了某些初始化,然后关闭minicom后,我的程序就也能运行了。但问题是我现在无法找出到底少了哪一部分的初始化工作。现在把代码贴在下面,希望有高手能帮一下忙看看到底是少了哪一点,不胜感谢。

/******************************* 读取串口程序 ********************************/
#include 
#include 
#include 
#include 
#include 
#include 

void set_speed(int, int);
int main()
{
int fd,flag,rd_num=0;
struct termios term;
struct timeval timeout;
speed_t baud_rate_i,baud_rate_o;
char recv_buf[20];
fd=open("/dev/ttyS0",O_RDWR|O_NONBLOCK);
if(fd==-1)
printf("can not open the COM1!n");
else
printf("open COM1 ok!n");

flag=tcgetattr(fd,&term);
baud_rate_i=cfgetispeed(&term);
baud_rate_o=cfgetospeed(&term);
printf("设置之前的输入波特率是%d,输出波特率是%dn",baud_rate_i,baud_rate_o);

set_speed(fd,9600);

flag=tcgetattr(fd,&term);
baud_rate_i=cfgetispeed(&term);
baud_rate_o=cfgetospeed(&term);
printf("设置之后的输入波特率是%d,输出波特率是%dn",baud_rate_i,baud_rate_o);

int transfer_started=0;
int i=0;
while(1)
{
rd_num=read(fd,recv_buf,sizeof(recv_buf));
timeout.tv_sec=0;
timeout.tv_usec=200000;
        if(rd_num>0)
        {
            printf("%d(间隔%4.3fs):we can read "%s" from the COM1,total:%d characters.n",++i,timeout.tv_sec+timeout.tv_usec*0.000001,recv_buf,rd_num);
            transfer_started=1; 
        }
        else
            printf("%d(间隔%4.3fs):read fail! rd_num=%d。本次数据传输%sn",++i,timeout.tv_sec+timeout.tv_usec*0.000001,rd_num,transfer_started==1?"已经结束":"尚未开始");  
            
// sleep(1);   粗糙定时
select(0,NULL,NULL,NULL,&timeout);/*精确定时*/
}
}



int speed_arr[] = {B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300};
int name_arr[] = {115200,  38400,  19200,  9600,  4800,  2400,  1200,  300};
void set_speed(int fd, int speed){
unsigned int   i; 
int   status; 
struct termios   Opt;
tcgetattr(fd, &Opt); 
for ( i= 0;  i 

    
 
 

您可能感兴趣的文章:

  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • linux下几个设备通过串口串行连接,如何协调各串口发送数据
  • Linux 中用java语言写串口程序,提示找不到串口
  • 高分求助:我笔记本没有串口,在linux下要和一个串口设备连,怎么办?
  • 关于linux串口通信中写串口的问题
  • 在虚拟Linux系统下能进行串口通讯吗?最好给个串口通讯的代码!谢谢!
  • linux下串口发送数据用串口精灵接受不到或为全零
  • 嵌入式linux,串口初始化时,无法设置串口属性
  • linux串口驱动该怎么写
  • linux下如何清空串口的输入输出缓存
  • linux下怎么监控串口?
  • vmware 上 linux 串口问题
  • linux下串口通信的问题
  • linux下的串口编程比较熟悉,麻烦帮忙!
  • 在线等待,求助LINUX下串口问题
  • 请教一个linux串口通讯问题?
  • linux 串口打印
  • 请问,那位高手研究过linux下的串口驱动程序?
  • 问一个LINUX下串口的问题
  • 如何在linux上使用串口设备
  • 谁有收到ORACLE 的免费LINUX光盘,知道怎么用吗?
  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • 在linux系统下无法收到mail问题请教
  • [求助]LINUX下的MAIL系统,发出的邮件别人能收到,但别人发过来的邮件这个系统总是收不到。。。。。。。
  • 求linux里的tcpdump命令,写一个监听15717端口收到和发出去的所有包
  • 紧急,我的linux、qmail、vpopmail一直用了两年,今天突然发现邮件发出去对方收不到,但可以收到其它地方发过来的邮件,在同一服务器上的
  • linux下netfilter中在PRE_ROUTING点收到的sk_buff内容为什么始终为空
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请较:用window2000做网关,现在LINUX怎么设置才能才能通过它上网呢?
  • 虚拟机下安装了Linux5.0要怎么设置才能在linux下上网
  • LINUX 下使用QT开发的程序如何才能让它在没有安装QT的Linux系统下运行?
  • 如何才能再次进入linux?
  • 请问xvfs是什么文件系统?怎样才能让linux认出?
  • 我怎么样才能进入linux??
  • 怎样才能启动我的linux,请大哥赐教!
  • 我刚安装了Linux,但我不知道如何才能通过Moden上网呢?
  • 怎么才能进linux啊?
  • 请问如何才能将LINUX的分区写到磁盘分区表里!
  • 如何配置linux才能上网?
  • Windows xp下如何才能访问安装在虚拟机上LINUX的文件目录信息
  • 双系统,Linux总是得重启几次才能进去
  • 在Windows2000下把Linux分区给格式化为NTFS后,怎样才能删除引导区?
  • 如何才能查看linux系统中所有的用户名呢?
  • 在linux如何才能看到磁盘引导扇区的512字节的内容啊??
  • 怎样才能看到linux的wget的源代码?
  • 在redhat 9.0 linux底下怎么才能使用usb盘?
  • 刚装上linux,我怎样才能看到windows(FAT32)下的文件?
  • 我第一次使用linux啊`麻烦问一下怎么才能上网啊?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3