公司如何做网站推广,京粉购物网站怎么做,简述网络营销发展趋势,优秀网站设计效果图Linux串口通信参数设置标志详解
1. 核心数据结构#xff1a;termios
struct termios {tcflag_t c_iflag; // 输入模式标志tcflag_t c_oflag; // 输出模式标志tcflag_t c_cflag; // 控制模式标志tcflag_t c_lflag; // 本地模式标志cc_t c_cc[NCCS]; // 控制字符…Linux串口通信参数设置标志详解1.核心数据结构termiosstructtermios{tcflag_tc_iflag;// 输入模式标志tcflag_tc_oflag;// 输出模式标志tcflag_tc_cflag;// 控制模式标志tcflag_tc_lflag;// 本地模式标志cc_tc_cc[NCCS];// 控制字符数组speed_tc_ispeed;// 输入波特率speed_tc_ospeed;// 输出波特率};2.控制模式标志 (c_cflag)数据位设置// 数据位宽度CS5// 5位数据位CS6// 6位数据位CS7// 7位数据位CS8// 8位数据位// 使用方法options.c_cflag~CSIZE;// 清除当前数据位设置options.c_cflag|CS8;// 设置8位数据位停止位CSTOPB// 2位停止位置1时默认1位停止位清零时// 1位停止位options.c_cflag~CSTOPB;// 2位停止位options.c_cflag|CSTOPB;校验位PARENB// 启用奇偶校验PARODD// 奇校验与PARENB一起使用// 无校验options.c_cflag~PARENB;// 奇校验options.c_cflag|(PARENB|PARODD);// 偶校验options.c_cflag|PARENB;options.c_cflag~PARODD;硬件流控制CRTSCTS// 启用RTS/CTS硬件流控制// 启用硬件流控制options.c_cflag|CRTSCTS;// 禁用硬件流控制options.c_cflag~CRTSCTS;其他重要标志CREAD// 启用接收器CLOCAL// 忽略调制解调器控制线HUPCL// 关闭时挂断调制解调器options.c_cflag|(CLOCAL|CREAD);// 通常启用这两个标志3.输入模式标志 (c_iflag)软件流控制IXON// 启用输出软件流控制IXOFF// 启用输入软件流控制IXANY// 允许任意字符重新启动输出// 启用XON/XOFF软件流控制options.c_iflag|(IXON|IXOFF|IXANY);// 禁用软件流控制options.c_iflag~(IXON|IXOFF|IXANY);输入处理INPCK// 启用输入奇偶校验检查IGNPAR// 忽略奇偶校验错误PARMRK// 标记奇偶校验错误ISTRIP// 剥离第8位将8位转为7位IGNBRK// 忽略BREAK条件BRKINT// BREAK产生中断信号INLCR// 将NL转换为CRIGNCR// 忽略CRICRNL// 将CR转换为NLIUCLC// 将大写转换为小写IMAXBEL// 输入缓冲区满时响铃// 常用设置原始模式options.c_iflag~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);4.输出模式标志 (c_oflag)OPOST// 启用输出处理OLCUC// 将小写转换为大写ONLCR// 将NL转换为CR-NLOCRNL// 将CR转换为NLONOCR// 第0列无CR输出ONLRET// NL执行CR功能OFILL// 使用填充字符OFDEL// 填充字符为DELNLDLY// NL延迟掩码CRDLY// CR延迟掩码TABDLY// TAB延迟掩码BSDLY// BS延迟掩码VTDLY// VT延迟掩码FFDLY// FF延迟掩码// 原始输出模式禁用所有输出处理options.c_oflag0;// 启用输出处理如将\n转换为\r\noptions.c_oflag|(OPOST|ONLCR);5.本地模式标志 (c_lflag)ICANON// 规范模式启用行编辑ECHO// 回显输入字符ECHOE// 规范模式下ERASE字符擦除前一个字符ECHOK// 规范模式下KILL字符擦除当前行ECHONL// 回显NL字符ISIG// 启用信号IEXTEN// 启用扩展功能NOFLSH// 中断时不刷新缓冲区TOSTOP// 后台作业尝试写终端时发送信号// 非规范模式原始模式设置options.c_lflag~(ICANON|ECHO|ECHOE|ISIG|IEXTEN);// 规范模式带行编辑设置options.c_lflag|(ICANON|ECHO|ECHOE);6.控制字符 (c_cc数组)规范模式控制字符c_cc[VINTR]// 中断字符默认Ctrl-Cc_cc[VQUIT]// 退出字符默认Ctrl-\c_cc[VERASE]// 擦除字符默认Backspacec_cc[VKILL]// 终止行字符默认Ctrl-Uc_cc[VEOF]// EOF字符默认Ctrl-Dc_cc[VEOL]// 附加行结束符c_cc[VEOL2]// 第二行结束符c_cc[VSTART]// 开始字符默认Ctrl-Qc_cc[VSTOP]// 停止字符默认Ctrl-S非规范模式超时设置c_cc[VTIME]// 超时时间十分之一秒c_cc[VMIN]// 最小读取字符数// 常用组合// 1. 阻塞读取直到读取至少1个字符options.c_cc[VTIME]0;options.c_cc[VMIN]1;// 2. 立即返回无论是否读取到字符options.c_cc[VTIME]0;options.c_cc[VMIN]0;// 3. 超时读取等待最多1秒options.c_cc[VTIME]10;// 10 * 0.1秒 1秒options.c_cc[VMIN]0;7.波特率设置// 标准波特率常量B0,B50,B75,B110,B134,B150,B200,B300,B600,B1200,B1800,B2400,B4800,B9600,B19200,B38400,B57600,B115200,B230400,B460800,B500000,B576000,B921600,B1000000,B1152000,B1500000,B2000000,B2500000,B3000000,B3500000,B4000000// 设置函数cfsetispeed(options,B115200);// 输入波特率cfsetospeed(options,B115200);// 输出波特率// 获取函数speed_tispeedcfgetispeed(options);speed_tospeedcfgetospeed(options);8.完整配置示例intconfigure_serial(intfd,speed_tbaudrate){structtermiosoptions;// 获取当前设置if(tcgetattr(fd,options)!0){perror(tcgetattr);return-1;}// 设置输入输出波特率cfsetispeed(options,baudrate);cfsetospeed(options,baudrate);// 控制标志设置options.c_cflag~CSIZE;// 清除数据位掩码options.c_cflag|CS8;// 8位数据位options.c_cflag~PARENB;// 无校验options.c_cflag~CSTOPB;// 1位停止位options.c_cflag~CRTSCTS;// 无硬件流控制options.c_cflag|(CLOCAL|CREAD);// 本地连接启用接收// 输入标志设置options.c_iflag~(IXON|IXOFF|IXANY);// 无软件流控制options.c_iflag~(INLCR|ICRNL|IGNCR);// 禁止输入转换// 输出标志设置options.c_oflag0;// 原始输出// 本地标志设置options.c_lflag0;// 非规范模式无信号// 控制字符设置options.c_cc[VTIME]0;// 无超时options.c_cc[VMIN]1;// 至少读取1个字符// 清空缓冲区并应用设置tcflush(fd,TCIOFLUSH);if(tcsetattr(fd,TCSANOW,options)!0){perror(tcsetattr);return-1;}return0;}9.实用函数// 清空缓冲区tcflush(fd,TCIFLUSH);// 清空输入队列tcflush(fd,TCOFLUSH);// 清空输出队列tcflush(fd,TCIOFLUSH);// 清空输入输出队列// 设置属性时机tcsetattr(fd,TCSANOW,options);// 立即生效tcsetattr(fd,TCSADRAIN,options);// 当前输出完成后生效tcsetattr(fd,TCSAFLUSH,options);// 当前输出完成并清空输入后生效10.注意事项修改串口参数前需先获取当前设置对于USB转串口设备使用/dev/ttyUSB*或/dev/ttyACM*非标准波特率需要使用termios2结构体多线程环境下需注意同步问题这些标志可以灵活组合以满足不同的串口通信需求从简单的原始二进制数据传输到复杂的终端交互都能支持。