Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
usb转串口
CherryUSB
CherryUSB虚拟串口使用
发布于 2024-03-18 14:26:46 浏览:1381
订阅该版
[tocm] # STM32使用CherryUSB实现虚拟串口 1、配置menuconfig, 配置的时候,**注意ip的选择,F4是dwc2,F1是fsdev**。 然后使用`pkgs --update` 下载程序包 | mcu产品线 | ip | | :----: | :---: | | F1 | fsdev | | F4 | dwc2 | 2、从demo仓储中复制一份usb_config.h文件放到自己的目录,然后对其进行修改: ```c /* ================ USB common Configuration ================ */ #define CONFIG_USB_PRINTF rt_kprintf #define usb_malloc(size) rt_malloc(size) #define usb_free(ptr) rt_free(ptr) #ifndef CONFIG_USB_DBG_LEVEL #define CONFIG_USB_DBG_LEVEL USB_DBG_INFO #endif ``` 3、要实现一个底层配置接口 ```c void usb_dc_low_level_init(void) { /* Peripheral clock enable */ __HAL_RCC_USB_CLK_ENABLE(); /* USB interrupt Init */ HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); } ``` 4、要对USB进行初始化,调用 `cdc_acm_init();` 根据`cdc_acm_template.c`模板弄就行: ```c /*!< endpoint call back */ struct usbd_endpoint cdc_out_ep = { .ep_addr = CDC_OUT_EP, .ep_cb = usbd_cdc_acm_bulk_out }; struct usbd_endpoint cdc_in_ep = { .ep_addr = CDC_IN_EP, .ep_cb = usbd_cdc_acm_bulk_in }; static struct usbd_interface intf0; static struct usbd_interface intf1; int cdc_acm_init(void) { usbd_desc_register(cdc_descriptor); usbd_add_interface(usbd_cdc_acm_init_intf(&intf0)); usbd_add_interface(usbd_cdc_acm_init_intf(&intf1)); usbd_add_endpoint(&cdc_out_ep); usbd_add_endpoint(&cdc_in_ep); usbd_initialize(); return 0; } volatile uint8_t dtr_enable = 0; void usbd_cdc_acm_set_dtr(uint8_t intf, bool dtr) { if (dtr) { dtr_enable = 1; } else { dtr_enable = 0; } } void usb_dc_low_level_init(void) { /* Peripheral clock enable */ __HAL_RCC_USB_CLK_ENABLE(); /* USB interrupt Init */ HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); } INIT_DEVICE_EXPORT(cdc_acm_init); ``` 5、使用举例 ```c void usbd_cdc_acm_bulk_out(uint8_t ep, uint32_t nbytes); // 接收回调,在这里面加入自己的业务逻辑 void usbd_cdc_acm_bulk_in(uint8_t ep, uint32_t nbytes); // 发送完成回调 usbd_ep_start_write(CDC_IN_EP, write_buffer, 2048); // 发送数据 ``` 6、建立连接或断开连接时会调用`usbd_cdc_acm_set_dtr`,连接时`dtr_enable`会置为1,断连时`dtr_enable`会清0
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Z_Y
这家伙很懒,什么也没写!
文章
11
回答
41
被采纳
1
关注TA
发私信
相关文章
1
利用stm32f427实现usb转串口,电脑端什么也没有识别到
2
usb转串口,设备一直接收到reset信息
3
usb转虚拟串口,设备一直返回NACK应答,如何解决??
4
stm32h743 usb vcom无法启动
5
nano添加usb无法通信
6
USB host端点管道数据收发问题
7
unable to open serial port
8
关于raspberry pico通过usbcdc来实现串口功能的问题
9
请教STM32F407的USB串口配置!!!!!!!!!!!!!
10
ART-PI 如何实现UART4对接USB-DBG口的?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部