Linux应用层对串口的使用操作

2023-05-16

在Linux中串口作为字符设备,设备节点在/dev/目录下,使用普通的open,close,write和read等系统调用即可使用。这其中会涉及到一些串口的基本属性的设置,如:波特率,奇偶校验,停止位,数据位以及有无流控等。一些特殊的系统调用和数据结构会被使用。

参考:

https://blog.csdn.net/u013485792/article/details/51006790

 

下面是一个简单的示例: 

#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 uart_init(int fd)
{
	struct termios newtio, oldtio;
	fcntl(fd,F_SETFL,0);/*恢复串口为阻塞状态*/
    if ( tcgetattr(fd, &oldtio ) != 0) {  
        perror("tcgetattr error");
        return -1;
    }
	bzero( &newtio, sizeof(newtio) );
    newtio.c_cflag  |= B115200 | CLOCAL | CREAD; // 设置波特率,本地连接,接收使能
    newtio.c_cflag &= ~CSIZE;
	newtio.c_cflag  |= CS8; // 数据位为 8 ,CS7 for 7 
	newtio.c_cflag &= ~CSTOPB; // 一位停止位, 两位停止为 |= CSTOPB
	newtio.c_cflag &= ~PARENB; // 无校验
	//newtio.c_cflag |= PARENB; //有校验
	//newtio.c_cflag &= ~PARODD // 偶校验
	//newtio.c_cflag |=  PARODD    // 奇校验
	//newtio.c_cc[VTIME] = 0; // 等待时间,单位百毫秒 (读)。后有详细说明
	//newtio.c_cc[VMIN] = 0; // 最小字节数 (读)。后有详细说明
	tcflush(fd, TCIOFLUSH); // TCIFLUSH刷清输入队列。
                                       //TCOFLUSH刷清输出队列。 
                                       //TCIOFLUSH刷清输入、输出队列。
	tcsetattr(fd, TCSANOW, &newtio); // TCSANOW立即生效;
                                                        //TCSADRAIN:Wait until everything has been transmitted;
                                                        //TCSAFLUSH:Flush input and output buffers and make the change	
	
	return 0;
}

int main(int argc, char *argv[])
{
	char buff[50] = {0};
	//char w_buff[] = {0xaa, 0x55, 0x00, 0x30, 0x00, 0x08, 0x00, 0x00, 0xff, 0x07, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x00, 0x00, 0x0d, 0x0a };
	char w_buff[] = {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa};
	int read_size = 0, i = 0, write_size = 0;
	//int fd = open("/dev/ttyAMA0", O_RDWR|O_NOCTTY|O_NDELAY);
	int fd = open("/dev/ttyAMA0", O_RDWR|O_NOCTTY);
	if(-1 == fd){
		perror("can't open serialport");
		return -1;
	}
	
	uart_init(fd);

	while(1)
	{
		write_size = write(fd, w_buff, sizeof(w_buff));
		if(write_size < 0){
			perror("serial port write is error");
		}
		
		read_size = read(fd, buff, sizeof(buff));
		printf("write_size = %d .receive length:%d data:", write_size, read_size);
		for(i = 0; i < read_size; i++){
			printf("%02x ", buff[i]);
		}
		printf("\n");
		usleep(300000);
	}
}

 

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

Linux应用层对串口的使用操作 的相关文章

随机推荐

  • 神经网络如何学习到加法等算法 - 神经编码器-解释器(Neural Programmer-Interpreters)

    算法的本质 何为算法 xff08 algorithm xff09 xff1f 从狭义来讲 xff0c 算法是计算机科学里面的概念 xff0c 简单来说 xff0c 所谓算法就是定义良好的计算过程 xff0c 它取一个或者一组值作为输入 xf
  • 使用pytorch预训练模型分类与特征提取

    pytorch pytorch v0 1 这个是早期版本了 应该是深度学习框架里面比较好使用的了 xff0c 相比于tensorflow xff0c mxnet 可能在用户上稍微少一点 xff0c 有的时候出问题不好找文章 下面就使用pyt
  • 深度学习训练中为什么要将图片随机剪裁(random crop)

    图像分类中 xff0c 深度学习训练时将图片随机剪裁 xff08 random crop xff09 已经成为很普遍的数据扩充 xff08 data augmentation xff09 方法 xff0c 随机剪裁不但提高了模型精度 xff
  • pytorch: grad can be implicitly created only for scalar outputs

    这个错误很早就遇到过但是没看到网上叙述清楚的 xff0c 这里顺便写一下 这里贴一下autograd grad 的注释 grad outputs inputs grad outputs 61 None retain graph 61 Non
  • 【经验】无线传输——空中速率

    1 简述 空中速率表示无线 xff08 在空气中的 xff09 通讯速率 xff0c 也叫空中波特率 信道速率 xff0c 单位bps xff08 秒传输的比特数 xff09 2 速率高低 空中速率高 xff0c 则数据传输速度快 xff0
  • 解决Win7的一个毛病——睡眠失效(只关闭显示器,不关主机)

    1 按下windows徽标键 xff0c 输入regedit xff0c 进入注册表 xff1b 2 进入注册表的HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control Session Man
  • 【视频】海康摄像头、NVR网络协议简介

    目录 郭老二博文之 图像视频汇总 1 软硬件整体架构 2 涉及的网络协议 3 协议简介 3 1 海康私有协议 设备发现SADP 进行设备的发现 激活 修改网络参数 忘记密码等 SDK 4200 系统平台的接入前端设备 协议不对外开放 但对外
  • 十分钟读懂游戏研发、发行、渠道那些事儿

    国庆在家写了7天东西 xff0c 实在是累得够呛 我重新梳理了一下以前做过的事儿 xff0c 正好把去年年初发到腾讯GAD的文章拿过来做个修改补充 xff0c 算是再做个总结吧 这篇文章主要是介绍游戏行业的上下游产业链有哪些玩家 xff0c
  • pomelo源码解析--新建项目(cli工具: pomelo)

    pomelo怎么新建项目 官方文档 1 安装pomelo 2 新建项目HelloWorld 我简单整理了下创建新项目关键步骤 xff1a 安装pomelo 方式一 xff1a npm install pomelo g 方式二 xff1a g
  • pomelo源码解析--启动项目(pomelo start)

    我们知道启动pomelo服务器是命令pomelo start xff0c 那执行pomelo start到底都做了些什么 xff1f 服务器之间是怎么连接的 xff1f 客户端是怎么给服务器发消息的 xff1f 下面我们通过源码一步步来展开
  • 博客迁移 https://cxx001.gitee.io

    博客新地址 xff1a https cxx001 gitee io
  • OpenGL--粒子系统

    理论基础 1 xff0c 粒子系统的基本思想是用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体 一般由点或很小的多边形通过纹理贴图表示 xff0c 侧重于物体的总体形态和特征的动态变化 把物体定义为许多不规则 xff0c 随机分布的
  • Cocos2dx-- 聊天系统之富文本(RichText)与字体对齐

    前言 游戏开发中我们一般都会有聊天系统 xff0c 我们可以同时或单独发文字 xff0c 图片 xff0c 表情 xff0c 超链接等信息的文本即称为富文本 如下图所示 xff1a 我使用的是cocos 3 4引擎版本里的RichText富
  • OpenGL--天空盒

    理论基础 1 xff0c 目前虚拟场景中天空建模常用的方法有天空顶 SkyDome 半球形 和天空盒 SkyBox 长方体 两种方法 其本质都是摄像机处在一个盒子中间 xff0c 这个盒子通过纹理贴图形成的虚拟世界场景 其中天空盒绘制技术非
  • OpenGL--使用Shader

    创建Shader 关于在OpenGL中怎么创建Shader这个在很早我博客中就有过详细介绍了 这里全当复习 xff0c 温故而知新 xff5e 在OpenGL中 xff0c 存在Program和Shader两个概念 xff0c Progra
  • 轻松学习CAN总线系列---3.CAN数据遵循的格式

    CAN帧 帧类型数据帧远程帧寻址CRC和应答位填充 帧类型 数据帧 xff08 Data frame xff09 为传输用户数据 xff0c ISO 11898 1定义了数据帧 数据帧可以传输的最大有效负载为八个字节 xff0c 即数据场
  • 无法解析的外部符号 "public: virtual struct CRuntimeClass

    无法解析的外部符号 34 public virtual struct CRuntimeClass thiscall CMessageBox GetRuntimeClass void const 34 以下原因是会引起上述错误的 xff1a
  • Qt控件美化 用好CSS/QSS可视化工具

    一 CSS概念 级联样式表 CSS 包含应用于网页中的元素的样式规则 CSS 样式定义元素的显示方式以及元素在页中的放置位置 可以创建一个通用规则 xff0c 只要 Web 浏览器遇到一个元素实例 xff0c 或遇到一个分配给某个特定样式类
  • c/c++中的struct和class的区别

    主要有两种情况 xff1a 1 C语言中的struct和c 43 43 中的class区别 2 c 43 43 中的struct和c 43 43 中的class的区别 下面分别介绍 xff1a 1 C语言中的struct和c 43 43 中
  • Linux应用层对串口的使用操作

    在Linux中串口作为字符设备 xff0c 设备节点在 dev 目录下 xff0c 使用普通的open xff0c close xff0c write和read等系统调用即可使用 这其中会涉及到一些串口的基本属性的设置 xff0c 如 波特