Linux (Ubuntu16) 下, 串口权限问题

环境: Ubuntu 16.04

问题:

在Linux中用QT编写串口应用程序,在配置好参数后点击连接时,报错遇到串口打开错误 Permission denied .
其实是串口权限不够,设置一下权限就好了。

1、先查看串口号
ls
2、查看串口权限
ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Mar 20 15:47 /dev/ttyUSB0
3、修改权限
sudo chmod 777 /dev/ttyUSB0

然后就可以正常连接了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu中,串口通信可以使用标准的Linux串口设备文件来完成。这些设备文件位于`/dev/`目录下,例如`/dev/ttyS0`表示第一个串口设备。 下面是一个简单的C语言程序,通过串口发送和接收数据: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <termios.h> #include <unistd.h> int main() { int fd; struct termios options; // 打开串口设备 fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open"); exit(1); } // 设置串口参数 tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_oflag &= ~OPOST; tcsetattr(fd, TCSANOW, &options); // 发送数据 char msg[] = "Hello world!"; write(fd, msg, strlen(msg)); // 接收数据 char buf[256]; int n = read(fd, buf, sizeof(buf)); if (n > 0) { buf[n] = '\0'; printf("Received: %s\n", buf); } // 关闭串口设备 close(fd); return 0; } ``` 在该程序中,首先通过`open()`函数打开串口设备文件`/dev/ttyS0`,使用`tcgetattr()`和`tcsetattr()`函数设置串口参数,然后通过`write()`函数发送数据,使用`read()`函数接收数据,最后关闭串口设备文件。 需要注意的是,串口设备文件的访问权限可能需要设置为可读写,否则可能会出现`Permission denied`错误。可以使用以下命令修改串口设备文件的权限: ``` sudo chmod a+rw /dev/ttyS0 ``` 另外,如果要在程序中使用非阻塞模式进行串口通信,可以将`O_NDELAY`标志传递给`open()`函数,然后在`read()`和`write()`函数中使用`select()`函数等待数据就绪。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值