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

linux下串口无法输入的问题

    来源: 互联网  发布时间:2016-05-20

    本文导语:  小弟想在linux下自己写一个串口程序,通过它与嵌入式设备进行交互; 目前,读数据基本是正常的,因为在启动时,若打开串口程序,则会输出启动信息,和在windows下输出一样; 主要问题在于输入,例如我在设备启...

小弟想在linux下自己写一个串口程序,通过它与嵌入式设备进行交互;
目前,读数据基本是正常的,因为在启动时,若打开串口程序,则会输出启动信息,和在windows下输出一样;
主要问题在于输入,例如我在设备启动后,我想让设备重启,在windows下在串口中输入reboot就可以实现重启,我在我的程序中,想通过write(fd, "rebootrn", 8);实现设备重启,但是设备没有反应;
在console下,有时候会回显几个字符,类似reboot,而且有提示符#出现,证明命令是输进去了,可能经过串口处理后边成了r9、lt一类的乱码

可能是输出设置哪里有问题,我现在设的是波特率38400,8位数据位,1位停止位,没有校验,没有流控制,这也是windows下的设置
newtio.c_lflag |= (ECHO|ICANON|ECHOE);是否设回显一类的尝试了都没用。

我现在想得到最简单的功能就是,在主程序中write(fd, "rebootrn", 8);时能够重启,加入read只是为了看输入是否正确;

请教要怎样才能实现从串口输入命令控制嵌入式设备?


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int read_port(int fd);
int init_port(int fd);

int main(int argc, char *argv[])
{
    int fd;
    int nread;
    char buff[512];
    unsigned char wbuf[512]="rebootrn";
    //unsigned char wbuf[512]="abcdefghijklmnopqrstuvwxyzrn";
    int ret;    
    char *dev = "/dev/ttyS0";

    fd = open("/dev/ttyS0", O_RDWR|O_NONBLOCK);
    if( fd == -1)
        perror("can't open serial 0n");
    printf("open OKn");

    init_port(fd);

    printf("finished init the serial portn");
    ret = write(fd, wbuf, strlen(wbuf));
 
    read_port(fd);
    
    close(fd);
    return 0;
}

int init_port(int fd)
{
    struct termios newtio;

    tcgetattr(fd, &newtio);
    bzero(&newtio, sizeof(newtio));

    newtio.c_cflag &= ~CSIZE;
    newtio.c_cflag |= CS8;      //8bits data
    newtio.c_cflag &= ~PARENB;  //no parity
    newtio.c_cflag &= ~INPCK;   //no parity
    newtio.c_cflag &= ~CSTOPB;  //1 bit stop
    newtio.c_cflag &= ~CRTSCTS; //no flow control
    newtio.c_cflag |= (CLOCAL|CREAD);//open read

    newtio.c_cc[VTIME] = 250;   //set out time; 
    newtio.c_cc[VMIN] = 0;      //update the options and do it NOW
    
    
    newtio.c_oflag &= ~OPOST;

    newtio.c_iflag &= ~(IXON|IXOFF|IXANY);//when | is software flow control
    //newtio.c_iflag &= ~(ICANON|ECHO|ECHOE);
    newtio.c_lflag |= (ECHO|ICANON|ECHOE);

    cfsetispeed(&newtio, B38400);
    cfsetospeed(&newtio, B38400);

    tcflush(fd, TCIFLUSH);

    if(tcsetattr(fd, TCSANOW, &newtio) != 0 )
    {
        perror("Setup serial 3");
        return -1;
    }    
}


int read_port(int fd)
{
    int n, max_fd, len, count=0;
    fd_set input;
    struct timeval timeout;
    char    buf[8196];
    char    *outbuf; 
    char    *ptr = buf;

    FD_ZERO(&input);
    FD_SET(fd, &input);
    max_fd = fd + 1;

    while(1)
    {
        timeout.tv_sec = 5;
        timeout.tv_usec = 0;

        if( write(fd, "hello worldrn", 13) 

    
 
 

您可能感兴趣的文章:

  • 在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上使用串口设备
  • linux 繁体 汉字输入法 问题 linux 繁体 汉字输入法 问题
  • 在linux下如何用c实现类似于Linux登陆时输入密码的场景: 即输入密码时不在屏幕上显示所输入的内容
  • 在linux下终端C编程做登陆时界面时,怎么在输入密码时让它不显示输入内容,或者输入一个字符是*
  • linux怎么输入中文? 有没有中文输入法阿?
  • LINUX 无法识别DVD光驱,请求帮助 iis7站长之家
  • SSH登陆linux,明明输入对的密码,还是弹出来要我输入密码?
  • linux下用ctrl+space怎么调不出输入法,我的系统也不能输入汉字
  • Virtul PC下的linux如何启动输入法?每次按ctr+space总是出现的是ms windows的输入法。
  • 我安装好了Linux后,用OpenOffice来写文档,不能输入汉字(有输入法,可是显示不出来!)
  • linux的命令包含有版本信息都很长,怎么样才能在Shell下输入的时候,只需要输入一部分,就可以出现整个命令!
  • 我装了中软Linux3.1,启动时要求输入用户名和口令,但安装时并没有提示指定用户名,所以现在输入用户名老是错误,不能进入系统,请问该怎
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux系统无法启动出错,键盘无法输入
  • 安装Linux7.3后,在Win2K中删掉Linux分区,导致无法正常启动(显示grub>;),且无法从光盘启动,该如何解决?请帮忙
  • windows 和linux双系统,重装windows后,无法启动linux?
  • 我系统安装了win2000,win98,linux,现在登录时只能进入win98和linux,无法进入win2000
  • 达人狂入:linux中木马,文件无法删除
  • linux 无法分逻辑盘
  • 华硕p5b无法安装linux?
  • LINUX系统无法识别到网卡
  • 无法设置路由器的情况下,远程连接linux电脑
  • 在Linux中复制文件如何自动跳过那些损坏的无法被复制的文件。
  • 晕倒!新买的机器无法安装linux!如何办?求救!
  • 急,,Linux下无法正常运行服务
  • 编译后的Linux怎么无法启动
  • linux无法登陆,急~~~~~~~~~
  • LINUX 无法识别DVD光驱,请求帮助
  • linux fstab问题,无法正常启动,急!!!
  • 我的WIN98无法访问LINUX
  • sata硬盘无法安装linux!
  • suse Linux 10 无法启动的问题!
  • linux在重装windows后无法启动
  • 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