配置串口需要包含头文件
其中最核心的配置结构体为:
如何获取该结构呢?我们 *** 作串口跟 *** 作文件一样,也是调用 open() 函数来打开串口,
这样我们就能够得到一个文件描述符 fd ,然后就可以调用 tcgetattr() 函数来获取上述配置结构体了。
Linux 串口默认的配置为:波特率 9600,数据位 8 位,无奇偶校验,停止位 1 位,无 CTS/RTS 。
以下介绍一些常用的配置项:波特率、奇偶校验、数据位、停止位、硬件控制流。
相关接口:
Linux 将串口的波特率分为了输入波特率和输出波特率,不过最常用的场景是将两者设置成一样。
cfgetispeed() 函数获取输入波特率, cfgetospeed() 函数获取输出波特率。 cfsetispeed() 函数设置输入波特率, cfsetospeed() 函数用于设置输出波特率,当然 cfsetspeed() 函数扩展为同时设置输入和输出波特率。
上述接口中的 speed_t 是一系列波特率的标志位,例如常用的 115200 波特率就为 B115200,参考下述选项:
设置奇偶校验位可以通过修改 termios 结构体中的 c_cflag 成员来实现,若无校验,则将 PARENB 位设为 0;若有校验,则 PARENB 为 1。之后再根据 PARODD 来区分奇偶校验, PARODD 为 1 表示奇校验, PARODD 为 0 表示偶校验。例如设置无奇偶校验位:
设置数据位可以通过修改 termios 结构体中的 c_cflag 成员来实现,CS5、CS6、CS7 和 CS8 分别代表数据位 5、6、7 和 8。不过在设置数据位之前,需要先用 CSIZE 来做屏蔽字段,清楚这几个标志位,例如设置数据位为 8 位:
设置停止位可以通过修改 termios 结构体中的 c_cflag 成员来实现, CSTOPB 位为 1 表示 2 位停止位, CSTOPB 位为 0 标志 1 位停止位。例如设置停止位为 1 位:
设置硬件控制流可以通过修改 termios 结构体中的 c_cflag 成员来实现, CRTSCTS 为 1 表示使用硬件控制流,为 0 表示不使用硬件控制流。例如使能硬件控制流:
当然,最后还需要用 tcflush() 抛弃存储在 fd 里的未接收的数据。
再利用接口 tcsetattr() 函数将配置信息写入文件描述符 fd :
这样整个串口最常用的用法就配置完成了。
具体的配置使用可以参考我的项目 HCI-Middleware 里的 hci_transport_uart_linuxc 文件。
参考:
1、串口屏和软件成功联机之后,左上角会显示当前波特率。
2、打开指令助手,点击“设备配置”,此时进入设备配置界面,如图所示。
3、修改之前需解除默认配置,点击“解除系统配置”,指令助手会发送对应指令。NANO型串口屏出厂波特率为115200,其它型号串口屏出厂波特率为19200。
4、修改波特率,波特率可修改范围为1200-2000000,点击“▼”,选择对应的波特率,点击“设置”。例如选择波特率为19200,点击“设置”,指令助手发送对应的指令。
5、如果需要重新锁定,点击“锁定系统配置”。
6、重新联机,此时的波特率为19200。
7、工程编译无误之后,直接点击“LOAD”,此时串口屏通过USB线下载工程。
一般波特率说的是针对串口通讯来说。在串口通讯的过程中肯定需要设置一下波特率。而蓝牙不属于串口通讯,所以没有波特率这么一说。
一般我们设置串口波特率为921600。
当设置完波特率以后,我们上位机就可以和设备交互了;但是这个时候需要和总线上的ECU进行通信就必须进行总线上波特率的设置了,一般为250K或者500K波特率;
这里有两个设置:
1,一个波特率是上位机和中间设备(天行健等等)之间的波特率设置,也就是我们常说的串口的波特率设置
2,一个是设置中间设备到can总线的波特率,一般为250k/500k,如果我们中间设备设置的到can总线的波特率设置的不对,那么将会影响总线总线会有错误帧出现及就是ACK错误,同时也收不到任何数据。
通常我们拿到一个中间的监测设备后,通过串口去监测这个设备,我们用串口模拟器直接设置了一个串口的波特率921600,然后发送握手命令后,就直接可以获取到数据,这个是因为中间设备设置了一个默认的can总线波特率250k,而通常整车的波特率都为250k,当然也有500k的,如果运气不好碰到了,那么将读取不到任何数据,还会扰乱总线,给总线上发送错误帧。
通常情况下,电脑的 串口 会在 默认 端口下工作
可以去 设备管理器 端口 属性 里 查
不过,具体应用 时,也可以 有软件 设定 具体的串口通信 工作 波特率等参数!
单片机或计算机在串口通信时的速率。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位240个/秒=2400bps。
又比如每秒钟传送240个二进制位,这时的波特率为240Bd,比特率也是240bps。
但是一般调制速率大于波特率,比如曼彻斯特编码)。它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。
单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误。
波特率是1S内传输的位数,50M晶振指每秒内脉冲个数,即每秒5010^6的脉冲个数,每个脉冲1/(5010^6)秒。分频数为每N个脉冲发送一个数据。N[1/(5010^6)]=1/9600,N=5208简便算来,就是晶振除以比特率
以上就是关于Linux C 配置串口全部的内容,包括:Linux C 配置串口、MCS-51单片机串口四种工作方式的波特率如何确定、简单说一下串口的波特率和can通讯的波特率等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)