Linux下串口操作-嵌入式-C語言實現


1.找到串口的設備號

在linux系統下,所有的設備都是文件,所以要先找到串口這個設備文件,之后就可以對這個串口進行操作。

#define   UART_DEV   "/dev/tty*" ///dev/tty**串口號 

2.打開串口並初始化串口

串口的打開只需要一個open函數就可以打開,下面有一個初始化的函數,先將串口打開,如果打開成功,會返回一個設備描述符

int uart_init(void )
{
    int fd=0;    
    fd = open(UART_DEV , O_RDWR|O_NOCTTY|O_NDELAY, 0);    
    if (fd < 0) 
    {        
        printf("open error!\n");        
        return -1;
    }    
    set_opt(fd);    
    return  fd;
}

set_opt函數用於設置串口的相關基本參數,一般串口都會設置波特率什么的,其余的參數可以用到的時候再查詢是什么意思,set_opt函數的定義如下:

int set_opt(int fd)
{    
    struct termios old_cfg, new_cfg;
    tcgetattr(fd, &new_cfg);    
    
    new_cfg.c_cflag |= (CLOCAL | CREAD);    
 
    cfsetispeed(&new_cfg, B9600);//設置波特率    
    cfsetospeed(&new_cfg, B9600);    
 
    new_cfg.c_cflag &= ~CSIZE;    
    new_cfg.c_cflag |= CS8;    
    new_cfg.c_cflag &= ~PARENB;    
    new_cfg.c_cflag &= ~CSTOPB;    
    new_cfg.c_cc[VTIME] = 0;    
    new_cfg.c_cc[VMIN] = 0;    
 
    tcflush(fd,TCIFLUSH);    
    tcsetattr(fd, TCSANOW, &new_cfg);    
 
    return 0;
}

這樣設置好了以后,串口的初始化基本就完成了。

3.用串口發送一串數據

利用串口發送一串數據,write

int uart_send(  int fd,  char * str)
{
    int wr_num;
    char buf[1024];
    sprintf(buf, "%s", str);    
    wr_num = write(fd,buf,strlen(buf));
    close(fd);
        return wr_num;
    
}

4.讀出串口接收到的數據,read

int uart_recv(int fd)
{    
    int nread;
    char buf[1024];        
        
    nread = read(fd, buf, LEN);
    if(nread > 0)            
    {            
        printf("%s\n",buf);     
            
    }                    
        close(fd);    
    return nread ;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM