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 设备文件并进行读写操作:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tomcat容器是如何创建servlet类实例?用到了什么原理?

Tomcat容器创建Servlet类实例的过程主要涉及到以下几个步骤&#xff1a; 加载类&#xff1a;Tomcat容器首先需要加载你的Servlet类。这通常通过在web.xml文件中配置Servlet的class属性来完成。实例化&#xff1a;一旦Servlet类被加载&#xff0c;Tomcat容器就会创建一个该类的…

【教程】苹果推送证书的创建和使用流程详解

​ 摘要 本篇博客主要介绍了苹果推送证书的使用流程。首先&#xff0c;在苹果开发者中心创建推送证书&#xff0c;然后在应用程序中使用该证书进行消息推送。文章详细说明了创建推送证书的步骤&#xff0c;并提供了在应用程序中注册推送服务、发送推送消息以及处理推送消息的相…

Databend 开源周报第 122 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持链式函数调…

PWN学习之LLVM入门

一、基本流程 ①找到runOnFunction函数时如何重写的&#xff0c;一般来说runOnFunction都会在函数表最下面,找PASS注册的名称&#xff0c;一般会在README文件中给出&#xff0c;若是没有给出&#xff0c;可通过对__cxa_atexit函数"交叉引用"来定位&#xff1a; ②通…

GEE:Sobel算子卷积和Roberts算子卷积对比

作者:CSDN @ _养乐多_ 本文介绍了Sobel算子卷积和Roberts算子卷积操作的代码,并进行了图像对比,可以观察到两个算子的细微差异。 文章目录 一、Sobel算子和Roberts算子对比二、完整代码三、代码链接一、Sobel算子和Roberts算子对比 详细介绍介绍参考《遥感数字图像处理教程…

uniapp搭建内网映射测试https域名

搭建Https域名服务器 使用github的frp搭建&#xff0c;使用宝塔申请免费https证书&#xff0c;需要先关闭宝塔nginx的反向代理&#xff0c;申请完域名后再开启反向代理即可。 教程 新版frp搭建教程 启动命令 服务器端 sudo systemctl start frps本地 cd D:\软件安装包\f…

MySQL笔记-第03章_基本的SELECT语句

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第03章_基本的SELECT语句1. SQL概述1.1 SQL背景知识1.2 SQL语言排行榜1.3 SQL 分类 2. SQL语言的规则与规范2.1 基本规则2.2 SQL大小写规范 …

连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式

解决方法 有多种方法可用于解决此问题&#xff08;请选择最适合您的一种&#xff09; 在 MySQL 中启用并正确实施 SSL创建一个数据库用户并将其配置为使用 mysql_native_password 身份验证插件。将以下参数添加到 JDBC URL&#xff1a;useSSLfalse&allowPublicKeyRetrieva…

算法-02-排序-冒泡插入选择排序

一般最经典的、最常用的&#xff1a;冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。那么我们如何分析一个"排序算法"呢&#xff1f; 1-分析排序算法要点 时间复杂度&#xff1a;具体是指最好情况、最坏情况、平均情况下的时间复杂…

算法-滑动窗口

一、滑动窗口思想 概念 在数组双指针里&#xff0c;我们介绍过 "对撞型" 和 "快慢型" 两种方式&#xff0c;而滑动窗口思想就是快慢型的特例。 实际使用 计算机网络中有滑动窗口协议&#xff08;Sliding Window Protocol&#xff09;&#xff0c;该协议…

10、pytest通过assert进行断言

官方实例 # content of test_assert1.pydef f():return 3def test_function():assert f() 4def test_assert_desc():a f()# assert a % 2 0assert a % 2 0, "value was odd, should be even"解读与实操 pytest允许你使用标准python断言来验证测试中的期望和值&…

NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等

目录 (一)npm包管理工具 1.了解npm 2.npm的配置文件 常见的配置属性 scripts属性*** 依赖的版本管理 3.npm安装包的细节 4.package-lock文件 5.npm install原理** 6.npm的其他命令 (二) 其他包管理工具 1.yarn工具 基本指令 2.cnpm工具 3.npx工具 (1)执行本地…

SAP中的新旧事务码

SAP中的新旧事务码 SAP随着新版本的发布&#xff0c;我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE&#xff0c;新TCODE有很多的新特性和新功能。在这个这种情况下&#xff0c;很多旧TCODE就会被废弃。我们如何查找这个替换呢&#xff1f; …

state_dict使用详解

在PyTorch中&#xff0c;state_dict是一个非常重要的概念&#xff0c;它是一个包含模型参数的字典对象。每个模型的state_dict都包含了该模型的所有参数&#xff08;权重和偏置等&#xff09;&#xff0c;用于在训练和推理过程中重现模型的内部状态. pytorch 中的 state_dict 是…

NetApp E5700 广泛应用于企业级 SAN 应用程序环境,例如大数据分析、技术计算、视频监控以及备份和恢复

主要优势 1、极致性能 • 利用最适合现代企业级应用&#xff08;例如&#xff0c;大数据分析、技术计算、视频监控以及备份和恢复&#xff09;的混合系统提高性能、IOPS 和密度。 2、无与伦比的价值 • 定制配置采用三个不同磁盘系统架、多种驱动器类型和一套齐备的 SAN 接口&…

MySQL-含json字段表和与不含json字段表查询性能对比

含json字段表和与不含json字段表查询性能对比 说明: EP_USER_PICTURE_INFO_2:不含json字段表 20200729json_test:含有json字段表 其中20200729json_test 标准ID、MANAGER_NO、PHONE_NO 为非json字段 data为json字段 2个表中MANAGER_NO、PHONE_NO都创建了各自的索引 测试…

CUDA简介, 配置和运行第一个CUDA程序(Windows和Linux)

CUDA简介 CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA开发的一种通用并行计算架构。CUDA允许程序员利用NVIDIA GPU的并行计算能力&#xff0c;加速各种计算密集型应用程序。 CUDA技术基于GPU的并行计算原理。传统的CPU处理器拥有少量的核心&…

java中Collectors.groupingBy返回实例?

在Java中&#xff0c;Collectors.groupingBy()是一个用于对流元素进行分组的收集器。它可以根据指定的分类函数对流元素进行分组&#xff0c;并返回一个Map对象&#xff0c;其中键是分组的标准&#xff0c;值是属于相应组的元素列表。 下面是一个使用Collectors.groupingBy()方…

js中继承的方法

前言: 本人刚写了一篇原型链的封装继承多态,用家有儿女做的demo。其实我个人感觉封装和多态都容易去理解与实现。关键在于继承,js的才是比较难的,也容易让人混乱,至少我是因为继承头大过\(^o^)/~ js中有很多方法可以实现继承,这篇文章主要对继承的方法进行学习与测试。 这里…

[STM32-1.点灯大师上线】

学习了江协科技的前4课&#xff0c;除了打开套件的第一秒是开心的&#xff0c;后面的时间都是在骂娘。因为51的基础已经几乎忘干净&#xff0c;c语言已经还给谭浩强&#xff0c;模电数电还有点底子&#xff0c;硬着头皮上吧。 本篇主要是讲述学习点灯的过程和疑惑解释。 1.工…