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

#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. Unreal ListView使用篇

    应用 ListView,在Unreal UI界面开发中用途非常广泛,基本只要你使用列表,就得需要用ListView.比如排行榜100个列表,界面上只需要显示出10个,我们肯定不能生成100个ui实例, ...

  2. 通讯录管理系统(C++)

    前言 本程序采用VS2019开发实现 博主尽可能完善并健壮了程序功能,如有不理想之处,请加以指正,博主会在第一时间修改完善.原创不易,望"推荐","关注",&q ...

  3. 【高频Java面试题】简单说说JVM堆的内存结构和GC回收流程

    目录 前言 JVM堆内存结构简述 JVM堆内存结构图 堆初体验 结构详情 新生代 老年代 永久代/元空间 GC回收流程 GC回收流程图 GC回收详细流程 查看JDK自带可视化堆空间图 总结 前言 我们 ...

  4. [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry

    链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...

  5. [题解]UVA10801 Lift Hopping

    链接:http://vjudge.net/problem/viewProblem.action?id=22172 描述:有n部电梯,每部电梯都有不能停下的楼层,要求搭乘电梯从第0层到第k层. 思路:单 ...

  6. VUE学习笔记(李天禹老师版本)

    目录 VUE 一 脚手架文件结构 二 关于不同版本的Vue 三 vue.config.js配置文件 vue文件的基本结构 components 四 ref属性 TIPS 五 props配置项 Tips ...

  7. selenium+python自动化102-登录页面滑动解锁(ActionChains)

    前言 登录页面会遇到滑动解锁,滑动解锁的目的就是为了防止别人用代码登录(也就是为了防止你自动化登录),有些滑动解锁是需要去拼图这种会难一点. 有些直接拖到最最右侧就可以了,本篇讲下使用 seleniu ...

  8. 无法cin一个string 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)

    头文件#include<string>不能写成#include<string.h>

  9. Leaflet:Map类属性及方法

    1.初始化 L.map(<String> id , options ?) //用地图div的id创建 L.map(<HTMLElement>el , options?) //用 ...

  10. 【NumPy】 之常见运算(np.around、np.floor、np.ceil、np.where)(转)

    原博客链接:https://blog.csdn.net/tz_zs/article/details/80775256 np.around: 四舍五入取整 n = np.array([-0.746, 4 ...