一、串口应用编程
串口编写应用的流程,引用链接的图片:
二、设置校验位
校验相关的宏
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时间返回