一、串口应用编程
串口编写应用的流程,引用链接的图片:

二、设置校验位
校验相关的宏
PARENB:是否启用校验
PARODD:是否启用奇校验,不起用奇校验即使用偶校验
CSTOPB:是否启用space/mark校验,如果启用,结合PARODD确定校验位置1或置0
CSTOPB:置位表示使用2位停止位,否则1位
无校验
options.c_cflag &= ~PARENB
options.c_cflag &= ~CSTOPB
奇偶校验
奇校验
options.c_cflag |= PARENB;
options.c_cflag &= ~CSTOPB
options.c_cflag |= PARODD
偶校验
options.c_cflag |= PARENB
options.c_cflag &= ~CSTOPB
options.c_cflag &= ~PARODD
伪装方式实现space和mark校验
使用停止位总为1的特性,实现mark校验(待补充)
space和mark校验(需要内核支持)
space校验
options.c_cflag |= PARENB;
options.c_cflag |= CMSPAR;
options.c_cflag &= ~PARODD;
mark校验
options.c_cflag |= PARENB;
options.c_cflag |= CMSPAR;
options.c_cflag |= PARODD;
设置数据位
# 这里为什么要先清CSIZE?先清除其他标志,然后才设置位数
opt.c_cflag &= ~CSIZE;
# 设置数据位为8位,也可以是 CS5,CS6,CS7
opt.c_cflag |= CS8;
三、VMIN和VTIME
VMIN:[0-255]
VTIME:[0-255]
VMIN =0,VTIME=0:读不到数据,read立即返回。
VMIN!=0,VTIME=0:读到VMIN个数据才返回,否则阻塞等待。
VMIN!=0,VTIME!=0:读到VMIN个数据,或者从进入read后读第一个数据VTIME时间,任一满足返回,单位为0.1S。没有数据会阻塞。
VMIN=0,VTIME!=0:读不到数据,read阻塞vtime时间返回
本文详细介绍了Linux串口编程中如何设置串口的校验位,包括无校验、奇偶校验以及通过CMSPAR实现的space和mark校验。同时,解释了VMIN和VTIME参数的作用,如何配置以控制串口读取数据的行为,如阻塞等待、超时设定等。
270

被折叠的 条评论
为什么被折叠?



