IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Linux系统嵌入式设备的串口通信 -> 正文阅读

[嵌入式]Linux系统嵌入式设备的串口通信

Linux系统嵌入式设备的串口通信

一. 为什么要配置串口通信

? 在嵌入式开发或者物联网开发过程中,串口输出数据是开发过程中初始过程,这一步方便我们看到设备产生的数据,可以直接通过串口调试助手帮助我们查看这些数据,那么问题来了,当我们可以让一个设备从串口使用UART的方式输出数据,这个设备和一个搭载Linux系统的嵌入式设备通信的时候怎么获取这个设备?Linux下一切皆文件,那么我们首先应该打开一个设备,一般一个UART通信的接口会设置成USB,在Linux系统下一个USB设备会被识别成一个叫ttyUSB*的设备,从标号0开始,找到了文件,我们就可以open、read、write了,接下来我们要做的就是像配置串口调试工具一样,把这个 ttyUSB *的设备配置成如下的通信方式,波特率为115200,位1停止位,8位数据位,无奇偶校验,这样就可以和其它USB转串口的设备通信了。

请添加图片描述

二. 配置的方法

2.1 配置的大致方法

  1. 设置termio结构体的标志位
  2. 设置波特率
  3. 使配置的termio生效

2.2 结构体 termio的内容

  1. termio结构体的内容

    struct termio {
    	unsigned short c_iflag;  /*输入模式*/
    	unsigned short c_oflag;  /*输出模式*/
    	unsigned short c_cflag;  /*控制模式*/
    	unsigned short c_lflag;  /*local mode flag*/
    	unsigned char c_line;    /*line discipline*/
        unsigned char c_cc[NCC]; /*control characters*/
    };
    
  2. c_iflag 常用的值

    请添加图片描述

  3. c_oflag常用的值

    请添加图片描述

  4. c_cflag常用的值

    请添加图片描述

  5. c_lflag

    请添加图片描述

  6. c_cc

    请添加图片描述

2.3 将一个USB设备文件配置成UART通信方式的函数实现

  1. 配置过程

    void serial_init(int fd)
    {
    	struct termios options;   //定义一个termios的结构体变量,此时options是个随机值
    	tcgetattr(fd, &options);  //获取文件描述符的配置信息,类似于配置寄存器的操作,读改写
    	options.c_cflag |= ( CLOCAL | CREAD ); //CLOCAL忽略调制解调状态行,目的是保证应用程序不会占用串口,CREAD启用接收装置 
    	options.c_cflag &= ~CSIZE; //CSIZE数据位长度的掩码,先设置清空,然后置为8
    	options.c_cflag |= CS8;    //设置数据位为8,可选的值有 CS5、CS6、CS7、CS8
        options.c_cflag &= ~CRTSCTS; //CRTSCTS的含义是启用硬件流控制,这里关闭硬件流控制 
    	
    	options.c_cflag &= ~CSTOPB; //CSTOPB表示送两个停止位,否则为1位,这里是&= ~CSTOPB是一个停止位的意思 
    	options.c_iflag |= IGNPAR; // 忽略奇偶校验  
    	options.c_iflag &= ~(ICRNL | IXON); // ICRNL将输入的CR转换成NL,IXON使启动/停止输出控制流起作用 ,这里是把这两个功能取消 
    	options.c_oflag = 0; 
    	options.c_lflag = 0;
    
    	cfsetispeed(&options, B115200); //设置输入的波特率
    	cfsetospeed(&options, B115200); //设置输出的波特率 
    	tcsetattr(fd,TCSANOW,&options); //调用tcsetattr,使上述配置生效 
    }
    
  2. 使用方法

    int dev_uart_fd ;
    //打开一个USB设备 
    if((dev_uart_fd =open("/dev/ttyUSB0",ORDWR)) < 0) {  
        perror("open ttyUSB0 error");
        puts("please check your usb device\n");
        return -1;
    }
    serial_init(dev_uart_fd);  //配置成串口通信方式
    
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:54:30  更:2021-08-16 11:56:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:15:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计