Linux设备与STM32 USB串口通讯

保证STM32 USB串口虚拟成功。

lsusb  

如果STM32单片机通过USB连接到计算机,你应该能够在输出中看到类似以下的行:

Bus XXX Device YYY: ID 0483:5740 STMicroelectronics

查看USB更多信息

sudo dmesg | grep tty

增加了下面类似信息:

cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device

好的,你的STM32设备已经被识别为一个USB ACM(Abstract Control Model)设备,对应的串口设备文件是 ttyACM0。这是一种常见的在Linux系统上与STM32通信的方式。

现在,你可以使用 ttyACM0 这个设备文件进行串口通信。例如,你可以使用 minicomscreen 等终端工具,或者通过编程语言(如C语言)来与STM32进行通信。

以下是一个简单的C语言代码示例,用于打开 ttyACM0 设备文件并进行读写操作:

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>

int open_serial_port(const char *port) {
    int fd = open(port, O_RDWR | O_NOCTTY);

    if (fd == -1) {
        perror("open_serial_port: Unable to open port");
    } else {
        fcntl(fd, F_SETFL, 0);
    }

    return fd;
}

void configure_serial_port(int fd) {
    struct termios tty;
    memset(&tty, 0, sizeof(tty));

    if (tcgetattr(fd, &tty) != 0) {
        perror("configure_serial_port: Error from tcgetattr");
        return;
    }

    cfsetospeed(&tty, B9600);
    cfsetispeed(&tty, B9600);

    tty.c_cflag &= ~CSIZE;
    tty.c_cflag |= CS8;

    tty.c_cflag &= ~PARENB;
    tty.c_cflag &= ~CSTOPB;

    tty.c_cflag &= ~CRTSCTS;
    tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    tty.c_oflag &= ~OPOST;

    tty.c_cc[VMIN] = 1;
    tty.c_cc[VTIME] = 5;

    if (tcsetattr(fd, TCSANOW, &tty) != 0) {
        perror("configure_serial_port: Error from tcsetattr");
    }
}

int main() {
    const char *port = "/dev/ttyACM0"; // 你的串口设备文件

    int serial_fd = open_serial_port(port);
    if (serial_fd == -1) {
        fprintf(stderr, "Failed to open serial port\n");
        return 1;
    }

    configure_serial_port(serial_fd);

    char buffer[256];
    memset(buffer, 0, sizeof(buffer));

    while (1) {
        int n = read(serial_fd, buffer, sizeof(buffer) - 1);

        if (n > 0) {
            buffer[n] = '\0';
            printf("Received: %s", buffer);
        } else if (n < 0) {
            perror("Error reading from serial port");
            break;
        }

        // 写入串口数据
        // write(serial_fd, "Hello, World!\n", 13);

        usleep(100000); // 100ms延迟
    }

    close(serial_fd);

    return 0;
}
相关推荐
韩楚风8 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学11 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO17 分钟前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu734 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我35 分钟前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、35 分钟前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程36 分钟前
Linux中环境变量
linux
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学2 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥3 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他