linux 串口查询与设置
1、对用户授予串口的访问权限
dialout是 Linux 系统中的一个用户组,通常用于控制对串口设备的访问权限。
sudo usermod -aG dialout $USER
将用户添加到 dialout 组。
查看下用户所属组,出现dialout说明成功。
#重启或更新下组信息,否则可能不出现
newgrp dialout
#查看用户所属组
groups
2、查看有哪些串口
sudo dmesg | grep tty
jetson设备可以看到如下信息
ttyTHS1 at MMIO 0x3100000 (irq = 112, base_baud = 0) is a TEGRA_UART
ttyTHS* 是 NVIDIA Tegra 平台上的串口设备命名规则。
查看串口波特率
stty -F /dev/ttyTHS1
3、设置串口
3.1 开机自动设置方式
使用systemd自启服务
sudo vim /etc/systemd/system/set-serial-port.service
添加内容
[Unit] Description=Set serial port configuration for /dev/ttyTHS1 After=network.target [Service] Type=oneshot ExecStart=/bin/stty -F /dev/ttyTHS1 115200 cs8 -parenb -cstopb RemainAfterExit=yes [Install] WantedBy=multi-user.target
自启
sudo systemctl enable set-serial-port.service sudo systemctl start set-serial-port.service
3.2 stty方式
注意:该方式只是临时的,重启后会失效。
设置串口 ttyTHS1 的波特率为115200、无奇偶校验、数据位为8、停止位1
sudo stty -F /dev/ttyTHS1 115200 cs8 -parenb -cstopb
查看下,是否设置成功(能找到就是成功了)
sudo stty -F /dev/ttyTHS1 -a

3.3 C++代码设置
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
int main() {
int fd = open("/dev/ttyTHS1", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("Error opening serial port");
return 1;
}
struct termios tty;
tcgetattr(fd, &tty);
// 波特率
cfsetospeed(&tty, B115200);
// 无奇偶校验
tty.c_cflag &= ~PARENB;
tty.c_iflag &= ~INPCK;
tty.c_cflag &= ~CSTOPB; // 1 位停止位
tty.c_cflag &= ~CSIZE; // 清除数据位掩码
tty.c_cflag |= CS8; // 8 位数据位
tcsetattr(fd, TCSANOW, &tty);
close(fd);
return 0;
}

浙公网安备 33010602011771号