Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
虚拟串口
转载 - 基于 RT-Thread 实现 USB 虚拟串口
发布于 2020-07-02 10:08:52 浏览:7105
订阅该版
[tocm] # 记录——基于 RT-Thread 实现 USB 虚拟串口 记录一下我在**正点原子 F429 阿波罗**开发板上实现 USB 虚拟串口的过程,希望可以帮助到其他想要学习 USB 的人。 转载于:https://blog.csdn.net/newbie_Blogger/article/details/92617242 1. 首先,我更新了一下 RT-Thread 的源代码(因为 RT-Thread 的代码更新很快,短时间内就有可能有很多的代码更新)。 2. 然后我进入 `rt-thread\bsp\stm32`目录下,找到了**正点原子 F429 阿波罗**开发板对应的BSP `stm32f429-atk-apollo`。 ![bsp 路径](https://img-blog.csdnimg.cn/20190617104719230.png) 3. 然后我先看了一下这个 BSP 当前支持不支持 USB。我在目录下打开 Env 工具,输入 `menuconfig` 命令,查看了一下,发现在硬件配置的片上外设的配置菜单中没有配置 USB 的选项,看来这个 BSP 还不支持 USB 设备。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617104858778.png) 4. 然后我想到,新的 STM32 BSP 所有的 BSP 都是用的同一份驱动,我去看一下有没有做好的 USB 驱动吧。然后我就打开了 `rt-thread\bsp\stm32\libraries\HAL_Drivers` 目录,如下所示,发现里面果然有 usb 的驱动文件,叫做 `drv_usbd_fs.c`。这就很好办了。 ![usb 驱动](https://img-blog.csdnimg.cn/20190617103238403.png) 5. 打开同一目录下的 Sconscript 脚本文件,查看一下这个驱动依赖什么配置,发现依赖于 `BSP_USING_USBD_FS` 这个配置。 ![Sconscript 脚本](https://img-blog.csdnimg.cn/20190617105915385.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 6. 既然有驱动,就一定有 BSP 已经支持了这个功能,我搜索了 stm32 目录下所有的 BSP ,看哪个 bsp 下有这个配置项。顺便看一下依赖关系。发现 F469 的 bsp 有这个配置项,看起来打开这个配置的同时,利用 select 命令也打开了 `RT_USING_USB_DEVICE` 这个配置。有了这段示例就好说了,只要在正点原子阿波罗的 bsp 下也添加这段配置就好了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617110503388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 7. 修改**正点原子 F429 阿波罗** bsp 下 Kconfig 文件,添加这一段配置项。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617112752372.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617112958466.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 8. 然后就可以利用 Env 工具配置工程了。在 目录下输入 menuconfig 配置 usb,开启刚添加的 usb 驱动的配置项。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617113439383.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 9. 然后,配置 usb 的设备框架。开启虚拟串口。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617113748852.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 10. 然后保存并重新生成工程。 发现编译报错。看起来是硬件没有配置。需要打开 stm32CubMX 配置 usb 的硬件引脚。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617113949738.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 11. 打开 `stm32f429-atk-apollo\board\CubeMX_Config` 目录下 stm32CubMX 的工程,配置 usb. ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617114131299.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617114441249.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 12. 发现开启 usb 功能之后,时钟配置报警告,我们再重新配置一下时钟。配置好之后,重新生成了一下代码。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617114609387.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 13. 由于更新了时钟树,所以还要把`stm32f429-atk-apollo\board\CubeMX_Config\Src`目录下main.c中的时钟配置函数`SystemClock_Config`更新到`stm32f429-atk-apollo\board`目录下的 board.c 文件中。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019061711510698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 14. 然后重新打开工程,编译,还是报错,`cannot open source input file "stm32f4xx_hal_exti.h": No such file or directory` ,我注释掉这个头文件重新尝试编译。再次编译,发现就没有问题了。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617115313991.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617115452701.png) 15. 下载运行,然后输入 `list_device` 命令可以看到注册到系统中的两个 usb 相关的设备。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617115726333.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) 16. 然后我在 main函数里添加了一段测试代码,编译下载运行。 ```c #include
#include
int main(void) { rt_device_t dev = RT_NULL; char buf[] = "hello rt-thread!\r\n"; dev = rt_device_find("vcom"); if (dev) rt_device_open(dev, RT_DEVICE_FLAG_RDWR); else return -RT_ERROR; while (1) { rt_device_write(dev, 0, buf, rt_strlen(buf)); rt_thread_mdelay(500); } return RT_EOK; } ``` 17. 连接开发板上的 USB_SLAVE 接口到电脑上,打开设备管理器,发现多了一个 USB 串行设备,用串口工具打开,就接收到 main 函数里发送过来的消息了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019061713453255.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190617134501860.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ld2JpZV9CbG9nZ2Vy,size_16,color_FFFFFF,t_70) **这样就在正点原子 F429 阿波罗开发板上实现了 USB 虚拟串口了。**
7
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
flyboy
Do my self();
文章
9
回答
509
被采纳
12
关注TA
发私信
相关文章
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
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
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部