当前位置: 首页 > news >正文

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;
}
  • 🌿输出效果:
    在这里插入图片描述
http://www.lryc.cn/news/269080.html

相关文章:

  • Java开发框架和中间件面试题(4)
  • 【腾讯云中间件】2023年热门文章集锦
  • SpringBoot 实现订单30分钟自动取消的策略
  • Qt篇——QwtPainter::drawPie绘制扇形
  • Mybatis Java API - SqlSession
  • java freemarker 动态生成excel文件
  • 第38节: Vue3 鼠标按钮修改器
  • redis cluster判断key属于那个分片。
  • Centos7:Jenkins+gitlab+node项目启动(3)
  • Linux安装GitLab教程
  • react 之 美团案例
  • C基础使用
  • Linux网络编程——Socket编程步骤及常用API
  • 数据挖掘 K-Means聚类
  • 医疗卫生行业网络安全需求发展
  • 【Unity热更新】学会AssetsBundle打包、加载、卸载
  • 智能优化算法应用:基于指数分布算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • vue 监听浏览器关闭或刷新事件
  • VuePress-theme-hope 搭建个人博客 2【快速上手】 —— 安装、部署 防止踩坑篇
  • ClickHouse基础知识(四):ClickHouse 引擎详解
  • 关于设计模式、Java基础面试题
  • Python爱心光波完整代码
  • PowerShell Instal 一键部署gitea
  • C语言——指针题目“指针探测器“
  • Hive讲课笔记:内部表与外部表
  • Docker本地部署开源浏览器Firefox并远程访问进行测试
  • PHP:服务器端脚本语言的瑰宝
  • 【MySQL】数据库并发控制:悲观锁与乐观锁的深入解析
  • 作业--day38
  • pytest 的 fixture 固件机制