Arduino stm32 USB CDC虚拟串口使用示例
Arduino stm32 USB CDC虚拟串口使用示例
- 📍相关篇《STM32F401RCT6基于Arduino框架点灯程序》
- 🔖本开发环境基于VSCode + PIO
- 🌿验证芯片:
STM32F401RC - ⌛USB CDC引脚: PA11、 PA12
- 🔧
platformio.ini配置信息:
[env:genericSTM32F401RC]
platform = ststm32
board = genericSTM32F401RC
framework = arduino
build_flags = -D USBCON -D USBD_USE_CDC; -D USE_USB_HS
upload_protocol = stlink
;upload_protocol = serial
;upload_protocol = jlink
;upload_protocol = cmsis-dap
- 🧨 STM32 USB CDC虚拟串口在Arduino IDE中好像可以在功能菜单上选择,
由于IDE环境支持包没有安装,没有进一步验证。✨个人还是推荐VSCode + PIO 方式来开发,比较灵活和便捷。✨
🔨Arduino IDE 环境下配置USB CDC虚拟串口方法
- 🔖这里以Arduino IDE
2.2.1版本设置为例,进行USB CDC虚拟串口配置:

📗USBSerial API相关函数
- 🔖 基本功能函数和硬件串口相关功能函数是一样。
void begin(void);void begin(uint32_t);void begin(uint32_t, uint8_t);void end(void);virtual int available(void);virtual int availableForWrite(void);virtual int peek(void);virtual int read(void);virtual size_t readBytes(char *buffer, size_t length); // read chars from stream into buffervirtual size_t readBytesUntil(char terminator, char *buffer, size_t length); // as readBytes with terminator charactervirtual void flush(void);virtual size_t write(uint8_t);virtual size_t write(const uint8_t *buffer, size_t size);
- ✨ 为什么是使用
Serial,因为在WSerial.h文件中有如下定义:
#if defined (USBCON) && defined(USBD_USE_CDC)#ifndef DISABLE_GENERIC_SERIALUSB#define ENABLE_SERIALUSB#if !defined(Serial)#define Serial SerialUSB#define serialEvent serialEventUSB#endif#endif#if defined(ENABLE_SERIALUSB)#define HAVE_SERIALUSB#endif
📝示例代码
#include <Arduino.h>
//#include <HardwareSerial.h>
#include <USBSerial.h>
//HardwareSerial Serial2(USART2); // 创建一个Serial2对象
//Arduino IDE环境下需要启用下面2个宏
// #define USBCON 1
// #define USBD_USE_CDC 1//----------
// #define USB_CDC_HID 1// put function declarations here:
int myFunction(int, int);#define led1 PC13
#define led2 PA_5uint32_t TimerUART;//HardwareSerial Serial1(PA10, PA9);//RX,TX将Serialx(x=1-4)串口x的管脚指定到PA10,PA9引脚上//USBSerial SerialCDC; // 创建一个USBSerial对象
// the setup function runs once when you press reset or power the board
void setup()
{// Serial1.begin(115200); // 初始化串口1作为调试串口// Serial.begin(115200); // Serial = Serial2初始化串口2作为调试信息输出// Serial.begin(115200);Serial.begin();// initialize digital pin LED_BUILTIN as an output.// Serial1.setRx(PA10); // using pin name PY_n// Serial1.setTx(PA9); // using pin number PYn// Serial.begin(115200);pinMode(led1, OUTPUT);pinMode(led2, OUTPUT);// pinMode(LED_BUILTIN, OUTPUT);TimerUART = HAL_GetTick();
}// the loop function runs over and over again forever
void loop()
{if ((HAL_GetTick() - TimerUART) > 1000){digitalToggle(led1);digitalToggle(led2);Serial.println("USART2(PA2 PA3)Arduino STM32F401RC \n");// delay(500); // wait for a secondSerial.printf("USART1(PA9 PA10)STM32F401 SysClockFreq:%d \r\n", HAL_RCC_GetSysClockFreq());Serial.print("from SerialUSB data\n");TimerUART = HAL_GetTick();}
}// put function definitions here:
int myFunction(int x, int y)
{return x + y;
}
- 🌿输出效果:

相关文章:
Arduino stm32 USB CDC虚拟串口使用示例
Arduino stm32 USB CDC虚拟串口使用示例 📍相关篇《STM32F401RCT6基于Arduino框架点灯程序》🔖本开发环境基于VSCode PIO🌿验证芯片:STM32F401RC⌛USB CDC引脚: PA11、 PA12🔧platformio.ini配置信息&…...
Java开发框架和中间件面试题(4)
27.如何自定义Spring Boot Starter? 1.实现功能 2.添加Properties 3.添加AutoConfiguration 4.添加spring.factory 在META INF下创建spring.factory文件 6.install 28.为什么需要spring boot maven plugin? spring boot maven plugin 提供了一些像jar一样打包…...
【腾讯云中间件】2023年热门文章集锦
各位读者,大家好! 光阴似箭,日月如梭,仿佛冬奥会的盛况还在眼前,新的一年却即将到来。在过去的一年里,我们见证了腾讯云中间件在产品升级与创新方面的显著进步,包括消息队列TDMQ品牌全新升级和…...
SpringBoot 实现订单30分钟自动取消的策略
简介 在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。 本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例…...
Qt篇——QwtPainter::drawPie绘制扇形
QwtPainter::drawPie(QPainter *painter, const QRectF &rect, int startAngle, int angle); 一、参数含义: painter: 重绘函数中的painter对象 rect: 要绘制扇形的圆的外切矩形。 startAngle: 要绘制的扇形的起始角 …...
Mybatis Java API - SqlSession
正如前面提到的,SqlSession实例是MyBatis中最重要、最强大的类。它是您将找到执行语句、提交或回滚事务以及获取映射器实例的所有方法的地方。 SqlSession 类上有超过二十个方法,让我们将它们分成更易理解的组别。 Statement Execution Methods-语…...
java freemarker 动态生成excel文件
好久木有更新啦 抓住2023的小尾巴 浅浅更新一下吧~ 最近做了一个动态生成excel的功能,这里记录下部分功能,主要用到的是freemarker框架,spring就有带,我起的demo载入了一下freemarker的jar包 一、创建模板 首先可以创建一个e…...
第38节: Vue3 鼠标按钮修改器
在UniApp中使用Vue3框架时,你可以使用按键修饰符来更精确地处理键盘事件。以下是一个示例,演示了如何在UniApp中使用Vue3框架使用.left、.right和.middle按键修饰符: <template> <view> <input keydown"handleKeyDown&…...
redis cluster判断key属于那个分片。
一、判断阿里云 redis cluster,的key属于那个分片。 阿里云特有的命令info key 可以查看key属于那个slot,那个分片 命令行查看: xxxx:6379> info key xxxx_compressed_xxx slot:4941 node_index:9 xxxx:6379> cluster keyslot xxxx_…...
Centos7:Jenkins+gitlab+node项目启动(3)
Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…...
Linux安装GitLab教程
Linux安装GitLab教程 1、配置yum源 相当于新建一个文件,通过这个文件来安装gitlab vim /etc/yum.repos.d/gitlab-ce.repo 把这些配置粘进去 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gp…...
react 之 美团案例
1.案例展示 2.环境搭建 克隆项目到本地(内置了基础静态组件和模版) git clone http://git.itcast.cn/heimaqianduan/redux-meituan.git 安装所有依赖 npm i 启动mock服务(内置了json-server) npm run serve 启动前端服务 npm…...
C基础使用
return 0; 语句用于表示退出程序。 一个程序有且只能有一个main函数的存在 安装编译环境: 安装vim: ubuntu里vim编辑器使用方法_ubuntu vim-CSDN博客 编译与运行: gcc hello.c //编译源文件 ./a.out //运行…...
Linux网络编程——Socket编程步骤及常用API
Sockt服务器和客户端的开发步骤 TCP connect()最好建立在listen()后,一旦监听到就建立连接。 UDP 常用API 包含头文件 #include<sys/types.h> #include<sys/socket.h>创建套接字(连接协议) 作用 用于根据指定的地址族、数据…...
数据挖掘 K-Means聚类
未格式化之前的代码: import pandas as pd#数据处理 from matplotlib import pyplot as plt#绘图 from sklearn.preprocessing import MinMaxScaler#归一化 from sklearn.cluster import KMeans#聚类 import os#处理文件os.environ["OMP_NUM_THREADS"] …...
医疗卫生行业网络安全需求发展
文章目录 一、行业安全建设需求分析1、等级保护2.0合规建设云计算技术大数据技术物联网技术移动互联网技术2、加强医疗数据安全保护加密存储与传输数据加强数据备份与恢复注重数据脱敏与分级保护3、强化网络安全制度管理完善应急预案与响应机制加强网络安全人员管理二、行业新技…...
【Unity热更新】学会AssetsBundle打包、加载、卸载
本教程详细讲解什么是AssetBundle压缩包机制!然后构建 AssetBundle、加载 AssetBundle 以及卸载 AssetBundle 的简要教程。这一个流程就是热更新! AssetBundles 简介 1.什么是AssetBundles? AssetBundles是Unity中一种用于打包和存储资源(如模型、纹理、声音等)的文件格…...
智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.…...
vue 监听浏览器关闭或刷新事件
vue 监听浏览器关闭或刷新事件 需求 web项目中使用socket时,涉及到关闭刷新浏览器多次连接问题,其中一个解决方法是在关闭或刷新浏览器时,将连接断开。 代码 <script> export default {// 可以在created、beforeMount或mounted生命…...
VuePress-theme-hope 搭建个人博客 2【快速上手】 —— 安装、部署 防止踩坑篇
续👆VuePress、VuePress-theme-hope 搭建个人博客 1【快速上手】 项目常用命令 vuepress dev [dir] 会启动一个开发服务器,以便让你在本地开发你的 VuePress 站点。vuepress build [dir] 会将你的 VuePress 站点构建成静态文件,以便你进行后…...
swoole方案 WebSocket 下推消息优先级队列
WebSocket 推消息优先级队列 大白话先说清楚 普通弹幕: "哈哈哈哈哈" 优先级 1 (低) 礼物打赏: "送了火箭!" 优先级 2 (中) 系统广播: "服务器维护通知" 优先级 3 (高)队列里同…...
S2-Pro提示词(Prompt)工程入门:从零到一掌握高效对话技巧
S2-Pro提示词(Prompt)工程入门:从零到一掌握高效对话技巧 1. 为什么需要学习提示词工程 你可能已经发现,同样的AI模型,在不同人手里表现天差地别。有人能让它写出专业报告,有人却只能得到敷衍的回复。这中…...
Python实战:5分钟搞定Paillier同态加密的安装与基础使用(附避坑指南)
Python实战:5分钟搞定Paillier同态加密的安装与基础使用(附避坑指南) 隐私计算领域近年来发展迅猛,而同态加密作为其核心技术之一,正在金融、医疗等行业的数据协作场景中发挥越来越重要的作用。Paillier算法作为支持加…...
霜儿-汉服-造相Z-Turbo实战体验:输入一句话,秒获专属汉服少女AI写真
霜儿-汉服-造相Z-Turbo实战体验:输入一句话,秒获专属汉服少女AI写真 1. 惊艳效果展示:从文字到古风美图的魔法 想象一下,你只需要输入"霜儿,古风汉服少女,月白霜花刺绣汉服,江南庭院&quo…...
零基础玩转OpenClaw:nanobot镜像可视化控制台入门
零基础玩转OpenClaw:nanobot镜像可视化控制台入门 1. 为什么选择nanobot镜像作为OpenClaw入门 第一次接触OpenClaw时,我被它强大的本地自动化能力所吸引,但很快就被复杂的命令行配置劝退了。直到发现了nanobot这个超轻量级OpenClaw镜像&…...
算法 POJ1029
一.题目大意假币描述“金条”银行从可靠来源收到的信息,在他们最后一组的 N 枚硬币中,恰好有一枚硬币是假的,并且重量与其他硬币不同(而所有其他硬币的重量都相同)。经济危机之后,他们只有一个简…...
Day25(高阶篇):RAG检索与重排序算法精研|从原理到参数调优,彻底攻克检索瓶颈
Day25(高阶篇):RAG检索与重排序算法精研|从原理到参数调优,彻底攻克检索瓶颈 引言: 进阶篇我们搞定了RAG系统的生产级落地,能满足常规项目的精准问答需求,但如果想让系统达到极致准确…...
光伏储能管理系统:绿虫赋能,破解行业流程痛点
光伏储能产业迎来高速发展期,但其全业务流程的复杂性却成为企业发展的桎梏。从项目开发的多环节审批,到建设阶段的进度质量管控,再到运维结算的数据协同,各环节割裂、部门协作不畅、数据杂乱无章等问题频发,不少企业负…...
【专栏二:深度学习】-【一张图讲清楚:什么是向前传输和向后传输】
文章目录前言一、输入数据:训练从样本开始二、向前传播:模型先算出一个预测结果三、先把第一个公式讲明白:为什么会有 z Wx b?四、只有线性计算还不够,所以还需要激活函数1. ReLU2. Sigmoid五、预测结果:…...
文档下载工具:突破平台限制的高效获取策略与零成本解决方案
文档下载工具:突破平台限制的高效获取策略与零成本解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是…...
