Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
usb转串口
CherryUSB
CherryUSB虚拟串口使用
发布于 2024-03-18 14:26:46 浏览:1731
订阅该版
[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
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Z_Y
这家伙很懒,什么也没写!
文章
11
回答
43
被采纳
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
SFUD
msh
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
549
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部