uart_linux

2023-11-04

/*写串口程序*/ 
#include <stdio.h> 
#include <string.h> 
#include <sys/types.h> 
#include <errno.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <termios.h> 
#include <stdlib.h> 
 
int open_port(int fd,int comport) 
{ 
	char *dev[]={"/dev/ttyS0","/dev/ttyS1","/dev/ttyS2"}; 
	long  vdisable; 

	if (comport==1)//串口1 
	{
		fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY); 
		if (-1 == fd)
		{ 
			perror("Can't Open Serial Port"); 
			return(-1); 
		} 
     } 
     else if(comport==2)//串口2 
     {     
		fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDELAY); 
		if (-1 == fd)
		{ 
			perror("Can't Open Serial Port"); 
			return(-1); 
		} 
     } 
     else if (comport==3)//串口3 
     { 
		fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDELAY); 
		if (-1 == fd)
		{ 
			perror("Can't Open Serial Port"); 
			return(-1); 
		} 
     } 
/*恢复串口为阻塞状态*/ 
     if(fcntl(fd, F_SETFL, 0)<0) 
     		printf("fcntl failed!\n"); 
     else 
		printf("fcntl=%d\n",fcntl(fd, F_SETFL,0)); 
/*测试是否为终端设备*/ 
     if(isatty(STDIN_FILENO)==0) 
		printf("standard input is not a terminal device\n"); 
     else 
		printf("isatty success!\n"); 
     printf("fd-open=%d\n",fd); 
     return fd; 
}

int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop) 
{ 
     struct termios newtio,oldtio; 
/*保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信息*/ 
     if  ( tcgetattr( fd,&oldtio)  !=  0) {  
      perror("SetupSerial 1"); 
      return -1; 
     } 
     bzero( &newtio, sizeof( newtio ) ); 
/*步骤一,设置字符大小*/ 
     newtio.c_cflag  |=  CLOCAL | CREAD;  
     newtio.c_cflag &= ~CSIZE;  
/*设置停止位*/ 
     switch( nBits ) 
     { 
     case 7: 
      newtio.c_cflag |= CS7; 
      break; 
     case 8: 
      newtio.c_cflag |= CS8; 
      break; 
     } 
/*设置奇偶校验位*/ 
     switch( nEvent ) 
     { 
     case 'O': //奇数 
      newtio.c_cflag |= PARENB; 
      newtio.c_cflag |= PARODD; 
      newtio.c_iflag |= (INPCK | ISTRIP); 
      break; 
     case 'E': //偶数 
      newtio.c_iflag |= (INPCK | ISTRIP); 
      newtio.c_cflag |= PARENB; 
      newtio.c_cflag &= ~PARODD; 
      break; 
     case 'N':  //无奇偶校验位 
      newtio.c_cflag &= ~PARENB; 
      break; 
     } 
     /*设置波特率*/ 
switch( nSpeed ) 
     { 
     case 2400: 
      cfsetispeed(&newtio, B2400); 
      cfsetospeed(&newtio, B2400); 
      break; 
     case 4800: 
      cfsetispeed(&newtio, B4800); 
      cfsetospeed(&newtio, B4800); 
      break; 
     case 9600: 
      cfsetispeed(&newtio, B9600); 
      cfsetospeed(&newtio, B9600); 
      break; 
     case 115200: 
      cfsetispeed(&newtio, B115200); 
      cfsetospeed(&newtio, B115200); 
      break; 
     case 460800: 
      cfsetispeed(&newtio, B460800); 
      cfsetospeed(&newtio, B460800); 
      break; 
     default: 
      cfsetispeed(&newtio, B9600); 
      cfsetospeed(&newtio, B9600); 
     break; 
     } 
/*设置停止位*/ 
     if( nStop == 1 ) 
      newtio.c_cflag &=  ~CSTOPB; 
     else if ( nStop == 2 ) 
      newtio.c_cflag |=  CSTOPB; 
/*设置等待时间和最小接收字符*/ 
     newtio.c_cc[VTIME]  = 0; 
     newtio.c_cc[VMIN] = 0; 
/*处理未接收字符*/ 
     tcflush(fd,TCIFLUSH); 
/*激活新配置*/ 
if((tcsetattr(fd,TCSANOW,&newtio))!=0) 
     { 
      perror("com set error"); 
      return -1; 
     } 
     printf("set done!\n"); 
     return 0; 
} 

/*读串口程序*/ 
int main(void)  
{ 
    int fd; 
    int nread,nwrite,i; 
    char buff[]="Hello\n"; 
 
    if((fd=open_port(fd,1))<0){//打开串口 
        perror("open_port error"); 
        return; 
    } 
    if((i=set_opt(fd,115200,8,'N',1))<0){//设置串口 
        perror("set_opt error"); 
        return; 
    } 
    printf("fd=%d\n",fd); 
    fd=3; 
    nread=read(fd,buff,8);//读串口 
    printf("nread=%d,%s\n",nread,buff); 
    nwrite=write(fd,buff,8);//写串口 
    printf("nread=%d,%s\n",nread,buff);
    close(fd); 
    return; 
} 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

uart_linux 的相关文章

随机推荐

  • unity应用实例——从头撸一个全新的FPS游戏(1)

    从今天开始打算从头开始搞一个全新的FPS游戏 引擎使用的是unity2017 所有美术资源都计划从商店购买或是网上下载 自己实在搞不来 主要玩法是玩家需要穿越多个地图到达目的地 每个地图类似于一个地牢 规定时间到地牢的门才会打开 在这之前玩
  • ios-常见的命令行工具

    pwd 查看当前目录 cat 在命令行中查看文件 ls 查看文件 ls l 就是以列表的形式展开 touch 创建文件 open 打开文件 more 分页查看文件内容 f是下一页 b是上一页 当你命令行有很多东西你写错了的时候不想去一一删除
  • 视频转为GIF上传

    下载地址 https en softonic com download licecap windows post download 这里是没有直接上传视频的入口的 但是有上传gif png等图片格式的入口 这里我们需要将上传的gif通过本地
  • 键盘数字测试软件,KeyboardTest(键盘测试工具)官方版

    KeyboardTest 键盘测试工具 简介KeyboardTest 键盘测试工具 是可以放心付诸时间的系统软件软件 下载尝试过这款KeyboardTest 键盘测试工具 2021 05 12 这款软件免费吗 好像这一类软件都有个自带广告
  • linux下各文件夹的结构说明及作用

    根目录下的文件夹 1 bin 目录 bin 目录包含了引导启动所需的命令或普通用户可能用的命令 可能在引导启动后 这些命令都是二进制文件的可执行程序 bin 是 binary 的简称 多是系统中重要的系统文件 2 boot 目录 boot
  • 4. Python的流程控制

    Hi 大家好 我是茶桁 在前面几节课的基础之上 我们今天开始尝试在Python中控制流程 这中间 让我们来做一些实际的练习 Python语句的分类 让我们先了解一下Python语句的分类 在Python中 可分为单行代码和代码块 组 顾名思
  • 激活函数(4)tanh函数

    tanh函数 双曲正切激活函数 函数解析式 tanh函数及其导数的几何图像如下图 tanh读作Hyperbolic Tangent 它解决了Sigmoid函数的不是zero centered输出问题 然而 梯度消失 gradient van
  • html 替换多选框和单选框默认的按钮

    div class 113 div
  • 如何学习html?

    怎么学习html 本文为html初学者介绍一些高效率的html学习办法 以及推荐一些不错的HTML学习资源给我们 希望能帮助到我们 怎么学习html html即超文本标记语言 现在大部分网页都是html格式 html代码也是一切编程语言中学
  • vim后,/要搜索字段,n(查找)

    vim后 要搜索字段 回车 n 查找
  • 测试测试测试

    目录 标题 标题 测试
  • Mysql索引

    1 什么是索引 索引是帮助MySQL高效获取数据的数据结构 2 索引的分类 单列索引 1 普通索引 mysql中的普通索引 允许插入重复值和null值 没有什么限制 纯粹为了查询快一点 2 唯一索引 索引中的列必须是唯一的 可以为null值
  • oracle 不带时分秒,关于Oracle数据库不带日期中时分秒的查询

    关于Oralce数据库 的日期时间查询 下面我们先来看一组日期数据 表 myDate 列 time 1998 8 7 23 45 33 3 1998 8 7 11 22 21 5 1998 8 7 00 00 00 0 上面列出的这组日期数
  • 50-00-010-配置-kylin-2.6.0官网配置

    文章目录 1 视界 1 Kylin 配置 2 配置文件及参数重写 3 Kylin 配置文件 配置重写 项目级别配置重写 Cube 级别配置重写 MapReduce 任务配置重写 Hive 任务配置重写 Spark 任务配置重写 部署配置 部
  • linux下部分文件管理类基本命令汇总以及bash展开特性介绍

    一 文件管理类基本命令 1 1 表格汇总 今天要讲解的命令如下表所示 按照外部命令和内建命令做基本划分 内建命令列表 命令名字 基本说明 file 检测文件类型 cd 改变shell的工作目录 dirs 显示目录堆栈信息 popd 从堆栈中
  • macOS_Monterey_12.6_21G115可引导可虚拟机安装的纯净版苹果OS系统ISO镜像安装包免费下载

    现在网络上黑果系统出现了许多多合一的多功能版 不是说这些版本不好 只是小编个人觉得 操作系统就是用来使用的 黑果本来就是服务于一些非苹果机的苹果OS爱好者的 简洁稳定应该是首选 固小编毅然放弃那些多功能的豪华版镜像版 独宠我的纯净可引导安装
  • pyqt5重温入门教程:用Qt Designer设计UI

    程序员今晚不回家 抖音号 在开始教程之前 先简单地水几句 之前使用过pyqt5 但是好久没用了 现在因为有一个项目需要 所以在此重温一下 当然教程就不是像零基础那样手把手从安装开始了 这里简洁明了 直接上手操作 第一步 打开Designer
  • 某宝sign参数逆向分析

    说明 淘宝ajax获取数据的方式为jsonp请求 所以在chrome中使用xhr拦截请求中加密参数的方式拦截不到 解决办法 目前我使用的方法是 添加DOM断点的方法去监听页面元素的变化 同时使用charles去监听页面发送的请求 后面就是一
  • 简单粗暴而又很有效果的图片无损放大方法

    工作生活中我们都会碰到想要对图片进行无损放大的情况 比如说做电子相册视频啦 做PPT啦 做设计啦等等等等 但是我们又没有那么专业的技术 PS也能试着操作一下 但始终没法弄能自己想要的效果 我们该如何对图片进行快速的无损放大呢 用PhotoZ
  • uart_linux

    写串口程序 include