当前位置: 首页 > news >正文

深圳分销网站设计电话望野赏析

深圳分销网站设计电话,望野赏析,企业网站模板建立流程,局域网建设直播网站目录 概述 1 了解串口应用编程 1.1 认识 struct termios 结构体 1.1.1 认识c_iflag 1.1.2 认识c_oflag 1.1.3 认识 c_cflag 的配置参数 1.1.4 认识c_lflag 1.2 终端相关的函数库 2 编写串口应用接口 2.1 设置baud函数 2.2 设置停止位函数 2.3 设置奇偶校验函数 2.4…目录 概述 1 了解串口应用编程 1.1 认识 struct termios 结构体 1.1.1 认识c_iflag 1.1.2 认识c_oflag 1.1.3 认识 c_cflag 的配置参数 1.1.4 认识c_lflag 1.2 终端相关的函数库 2 编写串口应用接口 2.1 设置baud函数 2.2 设置停止位函数 2.3 设置奇偶校验函数 2.4 设置停止位函数 3 使用usr API接口 3.1 配置参数函数 3.2 初始化串口函数 3.3 关闭串口函数 4 参考资料 源代码下载地址 Linux环境下终端接口应用函数serialport资源-CSDN文库 概述 本文介绍linux环境下终端接口的相关知识并介绍与其相关的数据结构的意义重要参数的解释。还使用接口编写用户函数以实现基于serial port的终端功能。 1 了解串口应用编程 在linux环境下串口是终端的一种形式。对其操作linux中已经定义了关于termios 的API 。在使用这些API之前必须对其要有基本的认识。 1.1 认识 struct termios 结构体 其定义如下 struct termios {tcflag_t c_iflag; /* input mode flags */tcflag_t c_oflag; /* output mode flags */tcflag_t c_cflag; /* control mode flags */tcflag_t c_lflag; /* local mode flags */cc_t c_line; /* line discipline */cc_t c_cc[NCCS]; /* control characters */speed_t c_ispeed; /* input speed */speed_t c_ospeed; /* output speed */ }; 参数定义如下 参数名称描述注释c_iflag输入模式参数标志位c_oflag输出模式参数标志位c_cflag控制模式参数标志位c_lflag本地模式参数标志位c_line终端的行规程c_cc[NCCS]终端的特殊字符c_ispeed配置输入波特率参数c_ospeed配置输出波特率参数 1.1.1 认识c_iflag 参数定义描述IGNBRK忽略输入终止条件BRKINT当检测到输入终止条件时发送 SIGINT 信号IGNPAR忽略帧错误和奇偶校验错误PARMRK对奇偶校验错误做出标记INPCK对接收到的数据执行奇偶校验ISTRIP将所有接收到的数据裁剪为 7 比特位、也就是去除第八位INLCR将接收到的 NL换行符转换为 CR回车符IGNCR忽略接收到的 CR回车符ICRNL将接收到的 CR回车符转换为 NL换行符IUCLC将接收到的大写字符映射为小写字符IXON启动输出软件流控IXOFF启动输入软件流控 1.1.2 认识c_oflag 参数定义描述IGNBRK忽略输入终止条件OPOST启用输出处理功能如果不设置该标志则其他标志都被忽略OLCUC将输出字符中的大写字符转换成小写字符ONLCR将输出中的换行符NL \n转换成回车符CR \rOCRNL将输出中的回车符CR \r转换成换行符NL \nONOCR在第 0 列不输出回车符CRONLRET不输出回车符OFILL发送填充字符以提供延时OFDEL如果设置该标志则表示填充字符为 DEL 字符否则为 NULL 字符 1.1.3 认识 c_cflag  含义 控制模式标志指定终端硬件控制信息 参数定义描述CBAUD波特率41位非POSIXCBAUDEX附加波特率1位非POSIXCSIZE字符长度取值范围为CS5、CS6、CS7或CS8CSTOPB2 个停止位如果不设置该标志则默认是一个停止位CREAD使用接收器PARENB使用奇偶校验PARODD对输入使用奇偶校验对输出使用偶校验HUPCL关闭设备时挂起CLOCAL忽略调制解调器线路状态CRTSCTS使用RTS/CTS流控制 CBAUD 参数定义如下 参数定义描述CBAUD波特率的位掩码B24002400 波特率B96009600 波特率B1920019200 波特率B3840038400波特率B5760057600波特率B115200115200波特率....其他波特率定义参看termios.h CSIZE参数定义如下 参数定义描述CS55 个数据位CS66 个数据位CS77 个数据位CS88个数据位 1.1.4 认识c_lflag 参数定义描述ISIG若收到信号字符INTR、 QUIT 等则会产生相应的信号ICANON启用规范模式ECHO启用输入字符的本地回显功能。当我们在终端输入字符的时候字符 会显示出来这就是回显功能ECHOE若设置 ICANON则允许退格操作ECHOK若设置 ICANON则 KILL 字符会删除当前行ECHONL若设置 ICANON则允许回显换行符ECHOCTL若设置 ECHO则控制字符制表符、换行符等会显示成“^X” 其中 X 的 ASCII 码等于给相应控制字符的 ASCII 码加上 0x40。例如 退格字符0x08会显示为“^H”H的 ASCII 码为 0x48ECHOPRT若设置 ICANON 和 IECHO则删除字符退格符等和被删除的字 符都会被显示ECHOKE若设置 ICANON则允许回显在 ECHOE 和 ECHOPRT 中设定的 KILL 字符NOFLSH在通常情况下当接收到 INTR、 QUIT 和 SUSP 控制字符时会清空 输入和输出队列。如果设置该标志则所有的队列不会被清空TOSTOP若一个后台进程试图向它的控制终端进行写操作则系统向该后台进 程的进程组发送 SIGTTOU 信号。该信号通常终止进程的执行IEXTEN启用输入处理功能 1.2 终端相关的函数库 使用串口终端必须包含下面两个图文件 #include termios.h#include unistd.h 其提供的函数接口如下 函数名功能介绍tcgetattr获取与终端相关的参数取得终端介质fd初始值并把其值 赋给temios_p;函数可以从后台进程中调用但是终端属性可能被后来的前台进程所改变。tcsetattr配置与终端相关的参数设置与终端相关的参数 (除非需要底层支持却无法满足)使用 termios_p 引用的 termios 结构。 optional_actions tcsetattr函数的第二个参数指定了什么时候改变会起作用 TCSANOW改变立即发生 TCSADRAIN改变在所有写入 fd 的输出都被传输后生效。这个函数应当用于修改影响输出的参数时使用。(当前输出完成时将值改变) TCSAFLUSH 改变在所有写入 fd 引用的对象的输出都被传输后生效所有已接受但未读入的输入都在改变发生前丢弃(同TCSADRAIN但会舍弃当前所有值)。tcsendbreak在一个指定的时间区内发送连续的0位流传送连续的 0 值比特流持续一段时间如果终端使用异步串行数据传输的话。如果 duration 是 0它至少传输 0.25 秒不会超过 0.5 秒。如果 duration 非零它发送的时间长度由实现定义tcdrain等待所有输出都被发送等待直到所有写入 fd 引用的对象的输出都被传输tcflush清除输入缓冲区或输出缓冲区ueue_selector 的值 TCIFLUSH 刷新收到的数据但是不读 TCOFLUSH 刷新写入的数据但是不传送 TCIOFLUSH 同时刷新收到的数据但是不读并且刷新写入的数据但是不传送tcflow对输入和输出流控制进行控制挂起 fd 引用的对象上的数据传输或接收取决于 action 的值cfmakeraw设置终端设置为原始模式raw data TCOOFF 挂起输出 TCOON 重新开始被挂起的输出 TCIOFF 发送一个 STOP 字符停止终端设备向系统传送数据 TCION 发送一个 START 字符使终端设备向系统传输数据 打开一个终端设备时的默认设置是输入和输出都没有挂起。cfgetispeed返回存储在 TermiosPointer 参数指向的 termios 结构中的输入波特率cfgetospeed返回存储在 TermiosPointer 参数所指向的 termios 结构中的输出波特率cfsetispeed将存储在 TermiosPointer 参数指向的 termios 结构中的输入波特率设置为 Speed 参数指定的值设置 termios 结构中输入和输出波特率的值。新值不会马上生效直到成功调用了 tcsetattr() 函数。cfsetospeed存储在 TermiosPointer 参数指向的 termios 结构中的输出波特率设置为 Speed 参数指定的值设置 termios 结构中输入和输出波特率的值。新值不会马上生效直到成功调用了 tcsetattr() 函数。 函数原型声明如下 int tcgetattr(int fd, struct termios *termios_p); int tcsetattr(int fd, int optional_actions,const struct termios *termios_p); int tcsendbreak(int fd, int duration); int tcdrain(int fd); int tcflush(int fd, int queue_selector); int tcflow(int fd, int action); void cfmakeraw(struct termios *termios_p); speed_t cfgetispeed(const struct termios *termios_p); speed_t cfgetospeed(const struct termios *termios_p); int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); 2 编写串口应用接口 2.1 设置baud函数 static void set_baudrate (unsigned int baudrate) {speed_t speed;speed baudrate_to_Bxx (baudrate); /* set baudrate */cfsetispeed(termios_new, speed); // set input speedcfsetospeed(termios_new, speed); // set output speed } 使用cfsetispeed()设置波特率时必须要要把其转换为 termios.h定义的类型本例中使用baudrate_to_Bxx()函数实现这个功能。在 termios.h中定义的baud类型 static speed_t baudrate_to_Bxx (unsigned int baudrate) {switch (baudrate) {case 1200:return (B1200);case 2400:return (B2400);case 9600:return (B9600);case 19200:return (B19200);case 38400:return (B38400);case 57600:return (B57600);case 115200:return (B115200);default:return (B9600);} } 2.2 设置停止位函数 static void set_stopbit (const char *stopbit) {if (0 strcmp (stopbit, 1)) {termios_new.c_cflag ~CSTOPB; /* 1 stop bit */}else if (0 strcmp (stopbit, 1.5)) {termios_new.c_cflag ~CSTOPB; /* 1.5 stop bits */}else if (0 strcmp (stopbit, 2)) {termios_new.c_cflag | CSTOPB; /* 2 stop bits */}else {termios_new.c_cflag ~CSTOPB; /* 1 stop bit */} } 2.3 设置奇偶校验函数 static void set_parity (char parity) {switch (parity) {case N: /* no parity check */termios_new.c_cflag ~PARENB;break;case E: /* even */termios_new.c_cflag | PARENB;termios_new.c_cflag ~PARODD;break;case O: /* odd */termios_new.c_cflag | PARENB;termios_new.c_cflag | ~PARODD;break;default: /* no parity check */termios_new.c_cflag ~PARENB;break;} } 2.4 设置停止位函数 static void set_data_bit (unsigned int databit) {termios_new.c_cflag ~CSIZE;switch (databit) {default:case 8:termios_new.c_cflag | CS8;break;case 7:termios_new.c_cflag | CS7;break;case 6:termios_new.c_cflag | CS6;break;case 5:termios_new.c_cflag | CS5;break;} } 3 使用usr API接口 3.1 配置参数函数 编写一个函数初始化串口参数详细代码如下其操作步骤 step-1: 清空termios_new step-2: 初始化termios_new数据结构 step-3: 填充用户参数 step-4: 调用tcsetattr使参数生效 static unsigned int set_portattr ( unsigned int baudrate, // 2400 4800 9600 .. 115200unsigned int databit, // 5, 6, 7, 8const char *stopbit, // 1, 1.5, 2char parity) // N(o), O(dd), E(ven) {bzero(termios_new, sizeof (termios_new));cfmakeraw (termios_new);set_baudrate (baudrate);termios_new.c_cflag | CLOCAL | CREAD; /* | CRTSCTS */set_data_bit (databit);set_parity (parity);set_stopbit (stopbit);termios_new.c_cc[VTIME] 1; /* unit: 1/10 second. */termios_new.c_cc[VMIN] 255; /* minimal characters for reading */return (tcsetattr (fd, TCSANOW, termios_new)); } 3.2 初始化串口函数 在初始化函数中其操作步骤如下 step-1: 打开串口设备 step-2: 获取旧的终端参数并将其保存在termios_old中 step-3: 调用set_portattr配置参数 int usr_serial_open( char *port, unsigned int baudrate, unsigned int databit, const char *stopbit, char parity) {int err;fd open (port, O_RDWR | O_NOCTTY | O_NDELAY);if (-1 fd) {fprintf(stderr, cannot open port %s\n, port);return (-1);}tcgetattr (fd, termios_old); /* save the form termios value */err set_portattr (baudrate, databit, stopbit, parity);if ( err ) {fprintf ( stderr, \nport %s cannot set baudrate at %d\n,port, baudrate);}return fd; } 3.3 关闭串口函数 关闭串口函数主要做如下事情 step-1: 恢复termios_old参数 step-2: 关闭fd对应的端口 void usr_serial_close( void ) {/* flush output data before close and restore old attribute */tcsetattr(fd, TCSADRAIN, termios_old);close(fd); } 4 参考资料 《Linux/Unix系统编程手册下册》
http://www.zqtcl.cn/news/666766/

相关文章:

  • 做建筑效果图最好的网站做网站是如果盈利的
  • 企业网站seo托管怎么做seo公司培训
  • 自己做网站不想买空间 自己电脑可以做服务器吗?下载建设网站软件
  • 有服务器自己怎么做网站百度广告电话号码是多少
  • 一个网站 两个数据库沈阳市住房和城乡建设厅网站
  • 重庆建站网站流程及费用制作网页界面工具
  • 设计师家园官网wordpress 4.9 优化
  • 主机屋空间安装织梦后台程序后怎么弄成淘宝客网站襄阳网站制作
  • 怎么建设分销模式手机网站宜昌做网站的公司
  • 网上商城网站设计网页设计作业欣赏
  • 育才网站建设网站访问慢原因
  • 网站建设方案 备案品牌网站推广软件
  • 桓台县建设局网站前端开发入门培训
  • 前端怎么在猪八戒网站接单做烟台网站开发技术
  • 济南烨铭网站建设做英文网站2014
  • 哪个餐饮店微网站做的有特色3d动画制作收费标准
  • h5旅游网站开发wordpress的站点地址如何配置
  • 网站正在维护中 模板招远网站建设
  • 福田欧曼银河报价seo文章是什么
  • 古云网站建设模具培训网站建设
  • 帮助企业做网站的销售卫浴洁具公司网站模板
  • 解释seo网站推广网站域名和空间费用
  • 深圳市珠宝网站建设手机网站框架
  • 晋城推广型网站开发dw做网站模板
  • 万网一个ip建立多个网站网页设计注册页面代码
  • 网站建设6000元地方门户网站有哪些
  • 十大SEO网站外链建设误区排版设计教程入门初学者
  • 网站基本维护网站设计软件下载
  • 网站开发的需求文档大型网站外链是怎么建设的
  • 网站建设实训心得与建议网站建设一般需要多少费用