linux下串口测试程序
通过简单的参数配置,执行文件+串口号+波特率
#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下串口测试程序的更多相关文章
- Linux下串口编程入门
简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...
- linux下串口通信与管理
linux下的串口与windows有一些区别,下面将介绍一下linux下串口通信管理 查看是否支持USB串口: #lsmod | grep usbserial 如果没有信息:sudo apt-get ...
- Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)
摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...
- Linux下串口编制【转】
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- Linux下串口编程【转】
本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...
- Linux下串口ttyS2,ttyS3不能用的问题解决办法
PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...
- linux下串口的阻塞和非阻塞操作
有两个可以进行控制串口阻塞性(同时控制read和write):一个是在打开串口的时候,open函数是否带O_NDELAY:第二个是可以在打开串口之后通过fcntl()函数进行控制. 阻塞的定义: 对于 ...
- Linux下串口操作
一.Linux下访问串口 串口位置:/dev/tty** 在Linux系统中,串口设备是通过串口终端设备文件来访问的,也就是通过访问/dev/ttyS0./dev/ttyS1./dev/ttyS2./ ...
- Deepin for Linux 下串口调试交换机
最近因工作需要,在淘宝购买了一条宇泰的串口线:USB to RS232 之所以选择这款,主要是它支持 Windows.Linux.mac Linux机是Deepin for Linux,算是国产比较好 ...
随机推荐
- uniapp 微信发送订阅消息
这篇主要针对小程序进行演示,既然是发送消息,那么就有三个问题.发送什么内容,给谁发送,怎么发送!往下一条一条解决. 发送什么消息内容 - 通过微信公众号平台 选择对应的消息模板 选择以后在我的模板里面 ...
- Dapp开发petshop——truffle官方例程
truffle-pet-shop pet-shop是truffle的官方例程. 之前参考https://learnblockchain.cn/2018/01/12/first-dapp/的中文教程,但 ...
- JVM内存结构的组成、各部分功能作用
一.程序计数器 作用:是记住下一条jvm指令的执行地址 特点: 是线程私有的 不会存在內存溢出 二.虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame) 组成,对应着 ...
- python中特殊参数self的作用
特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行. self代表的是类的实例本身,方便数据的流转.对此,我们需要记住两点: 第一点: ...
- 为什么在数据驱动的路上,AB 实验值得信赖?
在线AB实验成为当今互联网公司中必不可少的数据驱动的工具,很多公司把自己的应用来做一次AB实验作为数据驱动的试金石. 文 | 松宝 来自 字节跳动数据平台团队增长平台 在线AB实验成为当今互联网公司中 ...
- 常用windows快捷键及cmd、dos命令
Windows常用快捷键 #Alt+F4:关闭窗口.网页 #ctrl+C:复制 #ctrl+V:粘贴 #ctrl+X:剪切 #ctrl+Z:撤销 #ctrl+A:全选 #ctrl+S:保存 #shif ...
- 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...
- Python:wordcloud
wordcloud官方文档 1.简介 wordcloud是优秀的词云展示的第三方库 2.导入模块 import wordcloud 3.wordcloud对象初始化 以下参数值均为官方文档给出的默认值 ...
- docker学习笔记(2)——docker常用命令
参考博客: 1.官网教程:https://docs.docker.com/reference/ 可以一边敲命令一边对照官网学习,也可以通过阅读docker --help来学习 2..视频教程:http ...
- egg中使用sequelize事务,实现原子性
let transaction; try { // 建立事务对象 transaction = await this.ctx.model.transaction(); const house = awa ...