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;
}

 

posted @ 2025-02-26 13:14  夕西行  阅读(195)  评论(0)    收藏  举报