嵌入式linux串口设置(一)

在linux中,所有的设备文件一般都位于“/dev”下,串口1和串口2对应的设备名依次为“/dev/ttyS0”, “/dev/ttyS1”,而且USB转串口的设备名通常为“/dev/ttyUSB0”,在linux下对设备的操作方法与对文件的操作方法一样。

串口开发步骤:

串口的设置主要是设置struct termios结构体的各成员值

#include<termios>

struct termios

{

       Unsigned short c_iflag;            /*输入模式标志*/

       Unsigned short c_oflag;           /*输出模式标志*/

       Unsigned short c_cflag;           /*控制模式标志*/

       Unsigned short c_lflag;            /*本地模式标志*/

       Unsigned char c_line ;             /*线路规则*/

       Unsigned char c_cc[NCC];              /*控制特性*/

      Speed_t        c_ispeed;             /*输入速度*/

     Speed_t        c_ospeed;            /*输出速度*/

};

串口设置包括波特率设置,检验位和停止位设置,主要设置的是c_cflag结构体成员,注意,不能直接对c_cflag成员初始化,而要将其通过与或操作。

 

 

int set_com_config(int fd,int baud_rate, int data_bits,char parity,int stop_bits)

{

       struct termios new_cfg,old_cfg;

       int speed;

      

       /*保存并测试现有串口参数设置,在这里如果串口号等出错,会有相关出错信息*/

       if(tcgetattr(fd,&old_cfg) != 0)        /*该函数得到fd指向的终端配置参数,并将它们保存到old_cfg变量中,成功返回0,否则-1*/

       {

              perror("tcgetttr");

              return -1;

       }

      

       /*设置字符大小*/

       new_cfg=old_cfg;

       cfmakeraw(&new_cfg);    /*配置为原始模式*/

       new_cfg.c_cflag &= ~CSIZE;/*用位掩码清空数据位的设置*/

      

       /*设置波特率*/

       switch(baud_rate)

       {

              case 2400:

                            speed=B2400;

                            break;

           case 4800:

                            speed=B4800;

                            break;

              case 9600:

                            speed=B9600;

                            break;   

              case 19200:

                            speed=B19200;

                            break;                        

              case 38400:

                            speed=B38400;

                            break;

              default:

              case 115200:

                            speed=B115200;

                            break;

       }

       cfsetispeed(&new_cfg,speed);

       cfsetospeed(&new_cfg,speed);

      

       /*设置停止位*/

       switch(data_bits)

       {

              case 7:

                            new_cfg.c_cflag |= CS7;

                            break;

              default:

              case 8:

                            new_cfg.c_cflag |= CS8;

                            break;

       }

      

       /*设置奇偶校验位*/

       switch(parity)

       {

              default:

              case 'n':

              case 'N':

              {

                     new_cfg.c_cflag &= ~PARENB;

                     new_cfg.c_iflag &= ~INPCK;

              }

              break;

              case 'o':

              case 'O':

              {

                     new_cfg.c_cflag |= (PARODD | PARENB);

                     new_cfg.c_iflag |= INPCK;

              }

              break;

              case 'e':

              case 'E':

              {

                     new_cfg.c_cflag |=  PARENB;

                     new_cfg.c_cflag &= ~PARODD;

                     new_cfg.c_iflag |= INPCK;

              }

              break;

             

       }

      

       /*设置停止位*/

       switch(stopbits)

       {

              default:

              case 1:

                            new_cfg.c_cflag &= ~CSTOPB;

                            break;

              case 2:

                            new_cfg.c_cflag |= CSTOPB;

                            break;

       }

      

       /*设置等待时间和最小接收字符*/

       new_cfg.c_cc[VTIME]=0;

       new_cfg.c_cc[VMIN]=1;

      

       /*处理未接收字符*/

       tcflush(fd,TCIFLUSH);

      

       /*激活新配置*/

       if((tcsetattr(fd,TCSANOW,&new_cfg))!=0)

       {

              perror("tcsetattr");

              return -1;

       }

       return 0;

}

时间: 2024-09-11 13:11:01

嵌入式linux串口设置(一)的相关文章

嵌入式linux中设置开机运行shell脚本的问题

问题描述 嵌入式linux中设置开机运行shell脚本的问题 想写一个设置静态ip的开机自运行的shell脚本,然后百度说放在rc.local什么的文件里,然后我的板子里/etc 下根本没有这个文件,请大神们指点我应该怎么办? /etc 下只有fstab hosts host.conf group init.d inittab ld.so.conf mdev.conf profile passwd resolv.conf services 解决方案 输入命令 vi /etc/network/in

嵌入式linux串口编程(二)

/*com_writer.c*/#include "uart_api.h" int main(void){ int fd; char buff[BUFFER_SIZE]; if((fd=open_port(HOST_COM_PORT))<0)  /*打开串口*/ {  perror("open serial error");  return 1; } if(set_com_config(fd,115200,8,'N',1)<0) /*配置串口*/ {  

嵌入式linux串口通信自发自收测试程序

 /*串口自收自发程序主函数*/#include"uart_api.h"int main(){ int fd; char buff[BUFFER_SIZE]; char buff2[]="Hello NUAA2440!\n"; int nread,nwrite; if((fd=open_port(TARGET_COM_PORT))<0) {  perror("open serial error");  return 1; } printf(

嵌入式Linux设置PATH

博主现在所做开发的平台为一个Realtek的SDK.由于某些需要,要将 /usr/local/bin 加入到 PATH 环境变量中. 该嵌入式Linux的文件系统中没有 /etc/profile 类似的文件,只有 /etc/rcS.博主发现在 /etc/rcS 里添加 `PATH=$PATH:/usr/local/bin` 并没能使之在串口终端上生效. 博主思来想去,为什么系统默认 PATH 就是:`/bin:/sbin/:/usr/bin` ?在哪指定的? 博主最终在 busybox 中找到原

ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件      我想如果要从PC机下载东西到开发板的嵌入式linux系统里面,很多人首先会想到用tftp sftp等网络工具从网口下载.但如果网络用不了,只能通过串口下载怎么办呢?这个时候有两个工具能帮到你:一个是zmrx.zmtx,另外一个是lsz.lrz.个人觉得zmrx/zmtx没有lsz/lrz稳定,建议还是用后

linux 串口阻塞与非阻塞参数设置

在串口设置中,有以下两个参数可以决定是否阻塞. 在打开串口时不加O_NODELAY,可用下面的第二种方法,来进行阻塞/非阻塞的设定  c_cc[VTIME] 非规范模式读取时的超时时间(单位:百毫秒),可以这么理解,从接收到后一个字节开始计时,如果超时,则退出READ  c_cc[VMIN]  非规范模式读取时的最小字符数,设为0则为非阻塞,如果设为其它值则阻塞,直到读到到对应的数据 关键代码  iFd = open(cSerialName, O_RDWR | O_NOCTTY);       

基于ARM的嵌入式linux系统设计

基于ARM的嵌入式linux系统设计 摘要:本文简要介绍了ARM处理器的特点及其基本结构,详细论述了基于ARM的嵌入式linux系统的关键技术,包括引导加载程序.Linux内核.文件系统.用户应用程序.对linux系统的各部分开发设计做了较深入清晰地分析,总结了linux系统的特点,及其在嵌入式操作系统竞争中的优势.   关键字:ARM   linux  引导加载程序 内核 文件系统       Design of the embedded linux system based ARM     

《嵌入式 Linux C 语言应用程序设计(修订版)》——1.5 嵌入式系统开发概述

1.5 嵌入式系统开发概述 嵌入式 Linux C 语言应用程序设计(修订版) 1.5.1 嵌入式系统开发流程 嵌入式系统的开发流程与通用系统的开发流程有较大的区别,其设计流程如图1.15所示. 下面对系统各个模块进行简要说明. 系统需求分析:根据需求,确定设计任务和设计目标,制定设计说明书. 体系结构设计:描述系统如何实现所述的功能需求,包括对硬件.软件和执行装置的功能划分以及系统的软件.硬件选型等. 硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件.软件进行详细设计.一般情况下嵌入式

《嵌入式 Linux C 语言应用程序设计(修订版)》一1.5 嵌入式系统开发概述

1.5 嵌入式系统开发概述 嵌入式 Linux C 语言应用程序设计(修订版) 1.5.1 嵌入式系统开发流程 嵌入式系统的开发流程与通用系统的开发流程有较大的区别,其设计流程如图1.15所示. 图1.15 嵌入式系统的开发流程 下面对系统各个模块进行简要说明. 系统需求分析:根据需求,确定设计任务和设计目标,制定设计说明书. 体系结构设计:描述系统如何实现所述的功能需求,包括对硬件.软件和执行装置的功能划分以及系统的软件.硬件选型等. 硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件.