Arduino stm32 USB CDC虚拟串口使用示例
2023-12-29 12:29:48
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 buffer
virtual size_t readBytesUntil(char terminator, char *buffer, size_t length); // as readBytes with terminator character
virtual 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_5
uint32_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 second
Serial.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;
}
- 🌿输出效果:
文章来源:https://blog.csdn.net/weixin_42880082/article/details/135280240
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!