Linux嵌入式串口UART测试程序

Linux串口UART测试程序,收到什么,打印什么。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/signal.h>
#include<fcntl.h>
#include<termios.h>
#include<errno.h>#define FALSE -1
#define TRUE 0
#define flag 1
#define noflag 0int wait_flag = noflag;
int STOP = 0;
int res;int speed_arr[] ={ B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600,
B4800, B2400, B1200, B300,B115200 };
int name_arr[] ={ 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400,
1200, 300, 115200,};
void
set_speed (int fd, int speed)
{int i;int status;struct termios Opt;tcgetattr (fd, &Opt);for (i = 0; i < sizeof (speed_arr) / sizeof (int); i++){if (speed == name_arr[i])if (speed == name_arr[i]){tcflush (fd, TCIOFLUSH);cfsetispeed (&Opt, speed_arr[i]);cfsetospeed (&Opt, speed_arr[i]);status = tcsetattr (fd, TCSANOW, &Opt);if (status != 0){perror ("tcsetattr fd1");return;}tcflush (fd, TCIOFLUSH);}}
}int
set_Parity (int fd, int databits, int stopbits, int parity)
{struct termios options;if (tcgetattr (fd, &options) != 0){perror ("SetupSerial 1");return (FALSE);}options.c_cflag &= ~CSIZE;options.c_lflag &= ~ECHO;  //这个是重点!!!!!!!! 关闭回显功能 switch (databits){case 7:options.c_cflag |= CS7;break;case 8:options.c_cflag |= CS8;break;default:fprintf (stderr, "Unsupported data size\n");return (FALSE);}switch (parity){case 'n':case 'N':options.c_cflag &= ~PARENB;	/* Clear parity enable */options.c_iflag &= ~INPCK;	/* Enable parity checking */break;case 'o':case 'O':options.c_cflag |= (PARODD | PARENB);options.c_iflag |= INPCK;	/* Disnable parity checking */break;case 'e':case 'E':options.c_cflag |= PARENB;	/* Enable parity */options.c_cflag &= ~PARODD;options.c_iflag |= INPCK;	/* Disnable parity checking */break;case 'S':case 's':			/*as no parity */options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;break;default:fprintf (stderr, "Unsupported parity\n");return (FALSE);}switch (stopbits){case 1:options.c_cflag &= ~CSTOPB;break;case 2:options.c_cflag |= CSTOPB;break;default:fprintf (stderr, "Unsupported stop bits\n");return (FALSE);}/* Set input parity option */if (parity != 'n')options.c_iflag |= INPCK;tcflush (fd, TCIFLUSH);options.c_cc[VTIME] = 150;options.c_cc[VMIN] = 0;	/* Update the options and do it NOW */if (tcsetattr (fd, TCSANOW, &options) != 0){perror ("SetupSerial 3");return (FALSE);}return (TRUE);
}void
signal_handler_IO (int status)
{printf ("received SIGIO signale.\n");wait_flag = noflag;
}void StrToHex(unsigned char *pbDest, unsigned char *pbSrc, int nLen)
{
char h1,h2;
unsigned char s1,s2;
int i;for (i=0; i<nLen; i++)
{
h1 = pbSrc[2*i];
h2 = pbSrc[2*i+1];s1 = toupper(h1) - 0x30;
if (s1 > 9)
s1 -= 7;s2 = toupper(h2) - 0x30;
if (s2 > 9)
s2 -= 7;pbDest[i] = s1*16 + s2;
}
}void print_use()
{printf("*************Send hex data to uart and waitting timeout recv data************************ \n");printf("uart-test -d [/dev/ttyS0] -b [Baudrate 115200] -s [hex data eg:AA550102] \n");	printf("uart-test -d [/dev/ttyS0] -b [Baudrate 115200] -s [hex data eg:AA550102] \n");printf("uart-test -d [/dev/ttyS0] -b [Baudrate 115200] -s [hex data eg:AA550102] \n");	printf("******************************************************************* \n");}int main (int argc, char* argv[])
{int i=0; int j=0;printf ("This program updates last time at %s   %s\n", __TIME__, __DATE__);printf ("TEST FOR ZTJY IOT HW \n");print_use();if(argc != 7){print_use();return -1;}int fd;// fd = open (argv[2], O_RDWR|);fd = open (argv[2], O_RDWR|O_NOCTTY|O_NONBLOCK); //注意这里的标志位 是重点if (fd == -1){perror ("serialport open error\n");return -1;}else{printf ("open ");printf ("%s", argv[2]);printf (" succesfully\n");}set_speed (fd, atoi(argv[4]));if (set_Parity (fd, 8, 1, 'N') == FALSE){printf ("Set Parity Error\n");exit (0);}unsigned char sendData[1024]={0};StrToHex(sendData,argv[6],strlen(argv[6])/2); write(fd,sendData,strlen(sendData));//fflush();printf("Send Data: \n");for(i=0;i<strlen(sendData);i++)
{printf("-0x%2x-",sendData[i]);
}
printf("\n");char buf[2048];fd_set rd;int nread = 0;while(1){FD_ZERO(&rd);FD_SET(fd, &rd);while(FD_ISSET(fd, &rd)){if(select(fd+1, &rd, NULL,NULL,NULL) < 0){perror("select error\n");}else{while((nread = read(fd, buf, sizeof(buf))) > 0){printf("nread = %d,%s\n",nread, buf);for(j=0;j<nread;j++){printf("-0x%2x-",buf[j]);}printf("\n");printf("\n");printf("\n");memset(buf, 0 , sizeof(buf));printf("Exit uart-teset App\r\n");break;}}}}close (fd);printf("Exit uart-teset App");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp js 合成canvas画布

代码 <template><view><canvas canvas-id"canvas" class"canvas-c"></canvas><!-- <h1>999</h1> --></view> </template><script>export default {name: sharePos,props: {// 绘制图片的尺寸…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;路由协议是另一个比较常用的路由协议之一&#xff0c;它通过路由器之间通告网络接口的状态&#xff0c;使用最短路径算法建立路由表。在生成路由表时&#xff0c;…

亚马逊无线鼠标FCC认证办理 FCC ID

无线鼠标是指无线缆直接连接到主机的鼠标&#xff0c;采用无线技术与计算机通信&#xff0c;从而省却电线的束缚。通常采用无线通信方式&#xff0c;包括蓝牙、Wi-Fi (IEEE 802.11)、Infrared (IrDA)、ZigBee (IEEE 802.15.4)等多个无线技术标准。随着人们对办公环境和操作便捷…

RSS订阅

RSS订阅是一种内容聚合的工具&#xff0c;它可以帮助你聚合、分类、整理日常大量信息。以下是使用RSS订阅的一些好处&#xff1a; 获取更新信息&#xff1a;当你订阅了某个网站或者主题&#xff0c;每当有新的内容更新&#xff0c;你都会第一时间收到通知。提高阅读效率&#…

如何有效的进行服务器稳定性测试?

服务器稳定性是最重要的&#xff0c;如果在稳定性方面不能够保证业务运行的需要&#xff0c;再高的性能也是无用的。 正规的服务器厂商都会对产品进行不同温度和湿度下的运行稳定性测试。重点要考虑的是冗余功能&#xff0c;如&#xff1a;数据冗余、网卡冗余、电源冗余、风扇冗…

Vue中动态树形菜单,以及

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

Leetcode205. 同构字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0…

CTP:关于cc和bindgen库及rust工程组织

有三个工程目录&#xff0c;cpt-api, ctp-sdk,ctp-strategy 1、ctp-sdk&#xff1a; 主要的目的是基于bindgen库生成与cpp的.h文件相对应一个binding.rs文件&#xff0c;后面供策略使用。 在这个目录下&#xff0c;建一个build.rs,用bindgen库生成cpp.h的头文件相应的rust绑定…

蓝桥杯每日一题2023.9.29

蓝桥杯大赛历届真题 - C&C 大学 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述1 题目分析 看见有32位&#xff0c;我们以此为入手点&#xff0c; B代表字节1B 8b b代表位&#xff0c;32位即4个字节 (B) 1KB 1024B 1MB 1024KB (256 * 1024 * 1024) / 4 67108864 故答案…

redis主从从,redis-7.0.13

redis主从从&#xff0c;redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc&#xff0c;报错2、没有python3&#xff0c;报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…

[JAVA]黑马程序员文字打斗游戏复现

author:&Carlton language:JAVA website: b站黑马程序员 黑马程序员 JAVA 2022斯坦福大学合集面向对象程序设计练习题 目录 Role类 RoleTest类 Role类 package com.itheima.demo2;import java.util.Random;public class Role {private String name;private String fac…

Flutter笔记:用于ORM的Floor框架简记

Flutter笔记 用于ORM的Floor框架简记 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133377191 floor 模块地址&#xff1a;https://pub.dev/packages/floor 【介绍】&#xff1a;最近想找用于Dart和Flutter的ORM框架&#xff0c;偶然间发现了Floor…

Oracle的递归公共表表达式

查询节点id为2的所有子节点的数据&#xff0c;包括向下级联 WITH T1 (id, parent_id, data) AS (SELECT id, parent_id, dataFROM nodesWHERE id 2UNION ALLSELECT t.id, t.parent_id, t.dataFROM nodes tJOIN T1 n ON t.parent_id n.id ) SELECT * FROM T1; --建表语句 C…

什么是Times New Roman 字体

如何评价 Times New Roman 字体&#xff1f;&#xff1a;https://www.zhihu.com/question/24614549?sortcreated 新罗马字体是Times New Roman字体&#xff0c;是Office Word默认自带的英文字体之一。 中英文字体 写作中&#xff0c;英文和数字的标准字体为 Times New Roma…

目标检测YOLO实战应用案例100讲-雾天场景下低能见度图像 目标检测(中)

目录 2.3.3 损失函数与训练方法 2.4 实验与结果分析 2.4.1 改造骨干网络实验分析

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

十一,从摄像机打印HDR环境贴图

越来越接近真相了。我们很自然地想到&#xff0c;如果把漫游器放在中心打印&#xff0c;是不是就可以打印整个等距柱状投影图了呢&#xff1f;是的&#xff0c;但是&#xff0c;只是要注意的是&#xff0c;立方体贴图的内部和外部尽管一样&#xff0c;但是还是稍微有点模糊&…

spring6-IOC容器

IOC容器 1、IoC容器1.1、控制反转&#xff08;IoC&#xff09;1.2、依赖注入1.3、IoC容器在Spring的实现 2、基于XML管理Bean2.1、搭建子模块spring6-ioc-xml2.2、实验一&#xff1a;获取bean①方式一&#xff1a;根据id获取②方式二&#xff1a;根据类型获取③方式三&#xff…

安卓机型不需要解锁bl 不需要root 即可安装模块 框架 VirtualXposed使用步骤分析

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤 通过以上两个博文基本可以了解手机正常安装框架的步骤。但很多机型局限于不能解锁bl和root&#xff0c;那么这些机型能不能使…

vue前端项目中添加独立的静态资源

如果想要在vue项目中放一些独立的静态资源&#xff0c;比如html文件或者用于下载的业务模板或其他文件等&#xff0c;需要在vue打包的时候指定一下静态资源的位置和打包后的目标位置。 使用的是 copy-webpack-plugin 插件&#xff0c;如果没有安装则需要先安装一下&#xff0c;…