linux串口编程

串口通讯编程示例之串口参数设置 阅读详情

linux串口编程(要点总结) 收藏
串口编程
查询硬件的方式:查询方式、中断方式、DMA方式。串口很多是使用中断方式,这种方式一般来讲对CPU比较有效。

UART的操作主要包括以下几个部分:
      数据发送;数据接受;产生中断;产生波特率;Loopback模式;红外模式;自动流控模式;
      串口参数的配置主要包括:波特率、数据位、停止位、流控协议。

在linux下操作串口与操作文件相同。

在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现。
     Struct termios{
                 tcflag_t c_iflag;  /* input flags */
                 tcflag_t c_oflag;  /* output flags */
                 tcflag_t c_cflag;  /* control flags */
                 tcflag_t c_lflag;  /* local flags */
                 cc_t  c_cc[NCCS]; /* control character */
     };

串口配置流程
    1、保存原先串口配置,使用tcgetattr(fd,&oldtio)函数
         struct termios newtio,oldtio;
          tcgetattr(fd,&oldtio);
     2、激活选项,有CLOCAL 和CREAD,用于本地连接和接收使能。
           newtio.c_cflag |= CLOCAL | CREAD
     3、设置波特率,使用函数cfsetispeed、cfsetospeed。
            cfsetipeed(&newtio, B115200);
            cfsetospeed(&newtio, B115200);
     4、设置数据位,需要使用掩码设置。
             newtio.c_cflag &= ~CSIZE;
             newtio.c_cflag |= CS8;
     5、设置奇偶校验位,使用c_cflag和c_iflag。
            设置奇校验:
            newtio.c_cflag |= PARENB;
            newtio.c_cflag |= PARODD;
             newtio.c_iflag |= (INPCK | ISTRIP);
             设置欧校验:
             newtio.c_iflag |= (INPCK | ISTRIP);
             newtio.c_cflag |= PARENB;
             newtio.c_cflag &= ~PARODD;
      6、设置停止位,通过激活c_cflag中的CSTOPB实现。若停止位为1,则清楚CSTOPB,若停止位为2,则  激活CSTOPB。
            newtio.c_cflag &= ~CSTOPB;
      7、设置最少字符和等待时间,对于接受字符和等待时间没有特别要求时,可设为0。
            newtio.c_cc[VTIME] = 0;
            newtio.c_cc[VMIN] = 0;
      8、处理要写入的引用对象
             tcflush函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程序尚未读)
             或输出缓存(用户程序已写,但尚未发送)。
             int tcflush(int filedes, int queue)
              queue数应当是下列三个常数之一:
              TCIFLUSH 刷清输入队列。
              TCOFLUSH 刷清输出队列。
              TCIOFLUSH 刷清输入、输出队列。
       9、激活配置。在完成配置后,需激活配置使其生效。
             使用tsettattr()函数。原型:
              int tcgetattr(int filedes, struct termios *termptr);
              int tcgetattr(int filedes, int opt, const struct termios * termptr);
               tcsetattr的参数opt使我们可以指定在什么时候新的终端属性才起作用。opt可以指定wei下列常数中的一  个:
              TCSANOW 更改立即发生。
               TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应使用此选择项。
               TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的宋有输入数据都被删除(刷清)
              使用如:tcsetattr(fd, TCSANOW, &newtio)

打开串口
           f d = open("/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);

           open函数中除普通参数外,另有两个参数O_NOCTTY和O_NDELAY。
           O_NOCTTY:通知linux系统,这个程序不会成为这个端口的控制终端。
            O_NDELAY:通知linux系统不关心DCD信号线所处的状态(端口的另一端是否激活或者停止)
           然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入。用fcntl函数:
            fcntl(fd, F_SETFEL, 0);
 
           接着, 测试打开的文件描述符是否引用一个终端设备,以进一步确认串口是否正确打开.
            isatty(STDIN_FILENO);


串口读写
            串口的读写与普通文件的读写是一样的,使用read,write函数。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zhanghuiliang/archive/2008/05/21/2467040.aspx

串口通信(一)-通信理论及相关参数 讲述串口通信原理及相关参数,同时介绍寄存器、初始化和初值计算等,为下一文章串口通信达应用打下基础! 阅读详情

相关推荐

Linux·串口编程

串口编程简单实践

m0_64560763的博客 2890

串口通信参数

今天有同事突然问起残口通讯的问题,原来做过发现现在有点记忆不太深刻了,遂找出来资料温习下,呵呵。 串口通信的基本参数 串口一般用于ASCII码字符的传输。最基本的串口通信只需3个引脚即可实现,分别是地线、接收和发送。其他引脚用于握手协议。由于串口通信属于异步通信,可以在进行通信时不使用握手协议。 为了正确实现串口间的通信,必须对串口的参数进行设置。图6.13所示为使用Windows中的超级终

mousever的专栏 2873

串口通信协议和Linux下的串口编程

一、串口通信介绍: 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节,尽管比按位字节(byte)的并行通信慢,但是串口可以使用一根线发送数据的同时用另一根线接收数据。串口通信属于异步串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。 二、串口接头: 常见的串口接头有两种,一种是9针串口(简单DB-9),一种是25针串口(简称DB-25)。 以DB9为例为例,如图: 母头:泛指所有带孔状的接头(5针朝下,从左到

makunIT的博客 4174

linux串口编程(要点总结)

串口编程查询硬件的方式:查询方式、中断方式、DMA方式。串口很多是使用中断方式,这种方式一般来讲对CPU比较有效。UART的操作主要包括以下几个部分:      数据发送;数据接受;产生中断;产生波特率;Loopback模式;红外模式;自动流控模式;      串口参数的配置主要包括:波特率、数据位、停止位、流控协议。在linux下操作串口与操作文件相同。在使用串口之前必须设置相关配置

阿亮那块地儿 4117

《Linux C》04 串口编程总结

转载请注明:http://blog.youkuaiyun.com/herghost 如何找到串口设备号 串口之打开操作 串口之初始化 串口之发送 串口之接收 如何找到串口设备号 如果你使用的是开发板搭载linux系统进行的串口编程,你可以通过原理图进行查看 如果你电脑安装的linux系统,那么插上串口,通过dmesg命令进行查看 本文例子使用/dev/ttyS0 串口之打开操作#include

学编程找莫离,莫离老师更懂你! 2949

C#串口通信从入门到精通(2)——串口相关参数介绍

本文详细介绍了串口通信中需要使用到的多个参数,由一个高级工程师多年实战经验总结,绝对干货!

qq_34059233的博客 1万+

Linux串口应用编程

目录 本小节我们来学习Linux 下串口应用编程,串口(UART)是一种非常常见的外设,串口在嵌入式开发领域当中一般作为一种调试手段,通过串口输出调试打印信息,或者通过串口发送指令给主机端进行处理;当然除了作为基本的调试手段之外,还可以通过串口与其他设备或传感器进行通信,譬如有些sensor 就使用了串口通信的方式与主机端进行数据交互。 本章将会讨论如下主题内容。 ⚫ 串口应用编程介绍 ⚫ 应用编程实战 ...

zhuguanlin121的博客 1万+

Linux下串口编程

inux下的串口编程是通过串口设备文件和串口通信的系统调用函数来实现的。Linux下的串口设备文件通常为/dev/ttyS或/dev/ttyUSB(*表示数字),这些设备文件代表了对应的串口硬件设备。

2502

Linux串口编程

一、串口通信介绍 串口是计算机上的串行通信的物理接口。首先先介绍一下串行通信,串行通信的分类: 1、按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输;就像路上的单行线。 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输;半双工就像分时段的单行线,上午时段通行这边,下午时段通行另一边,而单工就是全天单行线。 全双工:允许数据同时在两个方向上传...

WuYujun's blog 3万+

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1040

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

Linux应用之串口编程

/声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了/ Author :tiger-john WebSite :blog.youkuaiyun.com/tigerjb Email :jibo.tiger@gmail.com Update-Time : 2011年2月14日星期一 Tiger声明:本人鄙视直接复制本人文章而不加出处的个人或团体, 但不排斥别人转载tiger-john的文章,

路过的熊的博客 6049

【项目实战-MATLAB】:基于机器学习的虹膜识别系统设计

虹膜识别主要包括虹膜定位、虹膜裁剪、极坐标变换、归一化、HOG特征提取、虹膜识别六个主要步骤。本系统采用MATLAB作为开发工具实现 主要算法:霍夫变换预处理 HOG特征提取 SVM进行识别

qq_45047246的博客 6537

Linux之串口编程

Linux之串口编程 一、串口编程的流程分析 打开串口,一般使用 open 函数,打开之后会返回句柄,这个句柄就可以提供给发送和接收函数使用。串口本质上也是字符设备,但是串口是属于一种比较特殊的字符设备。 初始化串口,串口需要配置波特率,数据位,校验位等等一系列的参数,初始化的过程掌握了,发送和接收都比较容易实现。虽然初始化比较麻烦,但是无论是在 window 下还是在 linux下,串口的初始...

qq_41783046的博客 1154

数学建模灵敏性分析(一阶、二阶灵敏度)python代码+懒人专用版

对于勉强看懂了灵敏度分析的同学来说,本文给出一个方便移植、修改的python程序,可以很方便地进行灵敏度分析。

春江花朝秋月夜 1万+

中兴通讯招聘测评答题技巧,真题解析(附真题)

中兴招聘测评、中兴入职测评、中兴线上考试

guang221315221的博客 5802

Linux系统编程:串口编程

Linux系统编程:串口编程Linux下的串口概述Linux串口编程代码解析编译和测试代码中的常量介绍 Linux下的串口概述 常见的数据通信的基本方式分为并行通信和串行通信。 1.并行通信:利用多条数据传输线将一个资料的各位同事传送。特点是速度快,通信距离近。 2.串行通信:利用一条传输线将数据一位一位地顺序传输。特点是通信线路简单,利用简单线缆就可以实现通信,降低成本,适合远距离通信但传输速度...

AngerTiger的博客 2537

[HBM] RAM Cell Self Repair | 内存单元自我修复

对抗错误的大都是冗余,内存颗粒在设计的时候也考虑增加冗余。具体的说:添加冗余或备用的存储单元行和列,及时将测试中的故障进行修复和替换,存储器修复包括行修复,列修复或两者的组合。

串起点滴 783

Linux 串口编程

Linux 串口编程

似霰的博客 1230

HBase在物流行业的应用:轨迹数据存储

想象一下,每天在全球范围内,数以亿计的物流包裹在各个城市、乡镇间穿梭。每一个包裹从发货人手中出发,经过仓储中心、转运站,最终到达收货人手中,这一路上都留下了它的“足迹”,也就是我们所说的轨迹数据。这些数据就像一个个拼图碎片,完整拼接起来后,能够清晰地呈现出整个物流网络的运行状况。例如,你在网上购买了一件心仪已久的商品,迫不及待地想知道它现在到哪儿了。物流平台实时更新的轨迹信息,让你可以准确了解包裹是在运输途中,还是已经到达附近的站点。

架构师的AI之路,分享AI应用开发架构的学习与实践。 965

嵌入式面经篇八——进程&线程

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第八篇。进程上文:是指进程由用户态切换到内核态时需要保存用户态时CPU寄存器中的值,进程状态以及堆栈上的内容。即保存当前进程的状态,以便再次执行该进程时,能够恢复切换时的状态,继续执行。进程下文:是指切换到内核态后执行的程序,即进程运行在内核空间的部分。中断上文:硬件通过中断触发信号,导致内核调用中断处理程序,进入内核空间。这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。

明天你好的博客 1854

linux 串口编程

<br />在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串口通信时相关参数与属性的设置。嵌入式Linux的串口编程时应注意,若在根文件中没有串口设备文件,应使用mknod命令创建,这这里假设串口设备是/dev/ttyS0,介绍一下串口的编程过程。<br />#mknod /dev/ttyS0 c 4 64<br />1、打开串口<br />       打开串口设备文件的操作与普通文件的操作类似,都采用标准的I/O操

freezgw1985的专栏 7052

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: busybox下mdev的使用以及mdev.conf的规则配置
下一篇: Qt多线程学习-用例子来理解多线程
futurepeter
博客等级 码龄19年 8粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值