通过简单的参数配置,执行文件+串口号+波特率

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <stdint.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <string.h>
#include <assert.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/time.h> #define msleep(x) usleep(x*1000) void my_printf(const char* head_l, unsigned char*date_in, int length_l)
{
int k;
printf("%s ", head_l);
for ( k = 0; k < length_l; k++)
{
printf("%02x ", date_in[k]);
}
printf("\n");
} int select_serial_device(int dev_id, char *name)
{
switch (dev_id)
{
case 1:
strcpy(name, "/dev/ttyS1");
break; case 2:
strcpy(name, "/dev/ttyS2");
break; case 3:
strcpy(name, "/dev/ttyS3");
break; case 4:
strcpy(name, "/dev/ttyS4");
break; case 5:
strcpy(name, "/dev/ttyS5");
break; case 6:
strcpy(name, "/dev/ttyS6");
break; case 7:
strcpy(name, "/dev/ttyS7");
break; case 8:
strcpy(name, "/dev/ttyS8");
break; case 9:
strcpy(name, "/dev/ttyS9");
break;
case 10:
strcpy(name, "/dev/ttyS10");
break; case 11:
strcpy(name, "/dev/ttyS11");
break; default:
return -1;
}
return 0;
}
unsigned int choose_baud_rate(int br_id)
{
unsigned int baud;
switch (br_id)
{
case 0:
baud = B0;
break;
case 50:
baud = B50;
break;
case 75:
baud = B75;
break;
case 110:
baud = B110;
break;
case 134:
baud = B134;
break;
case 150:
baud = B150;
break;
case 200:
baud = B200;
break;
case 300:
baud = B300;
break;
case 600:
baud = B600;
break;
case 1200:
baud = B1200;
break;
case 1800:
baud = B1800;
break;
case 2400:
baud = B2400;
break;
case 9600:
baud = B9600;
break;
case 19200:
baud = B19200;
break;
case 38400:
baud = B38400;
break;
case 57600:
baud = B57600;
break;
case 115200:
baud = B115200;
break;
case 460800:
baud = B460800;
break;
case 921600:
baud = B921600;
break;
case 1000000:
baud = B1000000;
break;
default:
printf("input error: baud rate not correct");
return -1;
}
return baud;
}
int init_serial_device(char *name, int baud)
{
int fd;
int ret;
struct termios options; fd = open(name, O_RDWR | O_NDELAY | O_NOCTTY); if (fd == -1){
printf("%s: open error\n", name);
return -1;
}
ret = tcgetattr(fd, &options);
if (-1 == ret)
return -1; options.c_cflag &= ~CSIZE; //屏蔽其他标志
options.c_cflag |= CS8; //将数据位修改为8bit
options.c_cflag &= ~PARENB; //无校验
options.c_cflag &= ~CSTOPB; // 设置一位停止位; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
cfsetispeed(&options, baud);
cfsetospeed(&options, baud);
options.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
ret = tcsetattr(fd, TCSANOW, &options);
if (-1 == ret)
return -1;
return fd;
} void process_serial_data(int fd)
{
char sendbuf[64] = "123456789123456789123456789123456789";
char recvbuf[64] = "";
int ret; while (1){
ret = write(fd, sendbuf,36); //发送数组
my_printf("send:",sendbuf,ret);
msleep(100); while(1){
memset(recvbuf, 0, sizeof(recvbuf));
ret = read(fd, recvbuf, 255);
if (ret == 0)
continue;
if(ret>0){
my_printf("recv:",recvbuf,ret);
break;
}
}
msleep(200);
}
} int main(int argc, char **argv)
{
int fd;
int bn;
int ret;
char name[12];
char sn;
speed_t baud; if (argc < 2){
printf("input error:*argv=1-11\n");
exit(-1);
}
if (argc > 3){
printf("input error: less than 4 parameters\n");
exit(-1);
} ret = sscanf(argv[1], "%d", &sn); ret = select_serial_device(sn,name);
if (-1 == ret)
return -1; ret = sscanf(argv[2], "%d", &bn); baud = choose_baud_rate(bn);
if (-1 == ret)
return -1; fd = init_serial_device(name,baud);
if (-1 == fd)
return -1; process_serial_data(fd); return 0;
}

直接交叉编译即可

linux下串口测试程序的更多相关文章

  1. Linux下串口编程入门

    简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...

  2. linux下串口通信与管理

    linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...

  3. Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)

    摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...

  4. Linux下串口编制【转】

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  5. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

  6. Linux下串口ttyS2,ttyS3不能用的问题解决办法

    PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...

  7. linux下串口的阻塞和非阻塞操作

    有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于 ...

  8. Linux下串口操作

    一.Linux下访问串口 串口位置:/dev/tty** 在Linux系统中,串口设备是通过串口终端设备文件来访问的,也就是通过访问/dev/ttyS0./dev/ttyS1./dev/ttyS2./ ...

  9. Deepin for Linux 下串口调试交换机

    最近因工作需要,在淘宝购买了一条宇泰的串口线:USB to RS232 之所以选择这款,主要是它支持 Windows.Linux.mac Linux机是Deepin for Linux,算是国产比较好 ...

随机推荐

  1. Solution -「洛谷 P5325」Min_25 筛

    \(\mathcal{Description}\)   Link.   对于积性函数 \(f(x)\),有 \(f(p^k)=p^k(p^k-1)~(p\in\mathbb P,k\in\mathbb ...

  2. 面向对象—继承(Day19)

    初识继承 继承是一种创建新类的方式,在python中新类可以继承一个或多个父类,父类又可称为基类或超类,新建的类为派生类或子类.(类与类之间的关系是什么是什么的关系.) 继承语法: class Par ...

  3. C++奇异递归模板模式

    虚函数的问题 虚函数的主要问题是性能开销比较大,一个虚函数调用可能需要花费数倍于非虚函数调用的时间,尤其是当非虚函数被声明为inline时(注意,虚函数不能被内联). CRTP介绍 CRTP的全称是C ...

  4. Hyperledger Fabric 2.x 动态更新智能合约

    一.说明 在上一篇文章中分享了智能合约的安装与使用,如果业务有变更代码需要修改怎么办呢?本文分享如何对已安装的合约进行版本更新. 二.环境准备 区块链网络安装:<Hyperledger Fabr ...

  5. 力扣第二题 大数相加 ,链表在python到底该怎么写?

    但问题在于链表的表示  如何创建一个L3呢 如何用next将他们连接起来呢? 原来是采用 制作链表的形式 l3_pointer.next = ListNode(l1_pointer.val + l2_ ...

  6. 【01】Maven依赖插件之maven-dependency-plugin

    一.插件目标(goal) 1.analyze:分析项目依赖,确定哪些是已使用已声明的,哪些是已使用未声明的,哪些是未使用已声明的 2.analyze-dep-mgt:分析项目依赖,列出已解析的依赖项与 ...

  7. 工程师计划1-> 项目管理1 | 项目与项目管理

    这学期报了一门课,项目管理,是一门网课,但跟之前不一样,我期待能够从这门课中学到一些东西.这是我上学期在组织毛概小组大作业时遇到困难时,意识到自己应该学习这门课. 工程师计划其实是一直以来想要把学习的 ...

  8. ScrollView垂直滚动和HrizontalScrollView水平滚动

    当我们在写一个页面,内容过多时我们需要滚动页面来查看,但是注意ScrollView下只能有一个元素,所以要把主页面改下,这样就只有一个LinearLayout元素: 1 <ScrollView ...

  9. 安卓Java主页面的编写

    1 package com.example.first; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android ...

  10. Docker入坑系列(一)

    Docker入坑系列(一) 引用嘛,当然是来引用别人说的东西啦. Docker 是一个开源项目,诞生于 2013 年初,它基于 Google 公司推出的 Go 语言实现. 项目后来加入了 Linux ...