你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于 RT-Thread 在 STM32 上实现 USB 虚拟串口

[复制链接]
eefishing 发布时间:2019-9-14 20:33
作者:郭老师
之前由于工作需要,基于 RT-Thread 在 STM32 上实现了 USB 虚拟串口。为了方便大家,我在这里把在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的详细过程分享给大家,希望可以帮助到更多想要学习 USB 的人。
1、首先,需要更新了一下 RT-Thread 的源代码(因为 RT-Thread 的代码更新很快,短时间内就有可能有很多的代码更新,Github地址:http://github.com/RT-Thread/rt-thread  点star还能领10元柿饼派优惠券)
2、然后进入 rt-thread\bsp\stm32目录下,找到正点原子 F429 阿波罗开发板对应的BSP stm32f429-atk-apollo ,打开此目录。
1.jpg
3、然后查看一下当前 BSP 支持不支持 USB 功能。在当前目录下打开 Env 工具,输入menuconfig 命令查看,可以看到在硬件配置的片上外设的配置菜单中并没有配置 USB 的选项,看来这个 BSP 还不支持 USB 设备。
2.jpg
4、想到新的 STM32 BSP 所有的 BSP 都是用的同一份驱动,这样就可以根据有没有做好的 USB 驱动来判断有没有 BSP 支持 USB 功能了。打开rt-thread\bsp\stm32\libraries\HAL_Drivers目录。如下所示,可以看到里面果然有 usb 的驱动文件,叫做drv_usbd_fs.c。
3.jpg
5、然后根据同一目录下的 Sconscript 脚本文件,可以查看这个驱动的依赖关系,根据下面的图片可以看出,此驱动文件依赖于 BSP_USING_USBD_FS这个配置项。
4.jpg
6、全局搜索此 stm32 目录下所有的 BSP ,查看哪个 bsp 下有这个配置项。根据这个配置项可以判断出哪个 BSP 支持了 USB 的功能,也可以借此看出依赖关系。搜索发现 F469 的 bsp 有这个配置项,由下图可以看出:打开这个配置的同时,也利用 select 命令打开了 RT_USING_USB_DEVICE 这个配置。
5.jpg
7、修改正点原子 F429 阿波罗 bsp 下 Kconfig 文件,添加这一段配置项。
6.jpg
7.jpg
8、然后,利用 Env 工具根据修改好的配置菜单配置工程。在 目录下输入 menuconfig 配置工程,开启刚刚添加的 usb 驱动的配置项。
8.jpg
9、然后,进入组件配置菜单下设备驱动的配置菜单中的 USB 配置,配置 usb 设备框架的选项。开启虚拟串口。
9.jpg
10、保存并重新生成工程。发现编译报错。看起来是硬件没有配置。需要打开 stm32CubMX 配置 usb 的硬件引脚。
10.jpg
11、打开stm32f429-atk-apollo\board\CubeMX_Config目录下 stm32CubMX 的工程,配置 usb.
11.png
$ q! y$ P3 ]7 B: n1 R6 \6 ?; }
12、开启 usb 功能之后,时钟配置报警告,还需重新配置一下时钟。配置好之后,重新生成代码。
* c  F5 U( a* r  k
12.jpg
13、由于更新了时钟树,所以还要把stm32f429-atk-apollo\board\CubeMX_Config\Src目录下main.c中的时钟配置函数SystemClock_Config更新到stm32f429-atk-apollo\board目录下的 board.c 文件中。
13.jpg
14、然后重新打开工程,编译,发现还是报错,cannot open source input file "stm32f4xx_hal_exti.h": No such file or directory,注释掉报错的头文件重新编译即可。再次编译,发现没有问题了。
14.jpg

0 u/ `3 \/ d0 W
15、下载运行,输入 list_device 命令可以看到注册到系统中的两个 usb 相关的设备。
15.jpg
16、然后在 main函数里添加一段测试代码,编译下载运行。
16.png
收藏 评论3 发布时间:2019-9-14 20:33

举报

3个回答
maxtch 回答时间:2019-9-15 01:22:19
这么费劲?
lebment 回答时间:2019-9-16 15:15:51
maxtch 发表于 2019-9-15 01:22
% i! [. l8 ]' c3 d7 i& g: f这么费劲?
  C$ J  U0 n" i  r1 h
+1                     
% _& J  J. g5 B) O
deepsky2018 回答时间:2019-11-14 16:30:21
请问下,如果想用中断方式接收虚拟串口的数据,应该怎么做?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版