打印
[资料干货]

记录——基于RTT在STM32上实现 USB 虚拟串口

[复制链接]
990|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 Fillmore 于 2019-6-21 17:44 编辑

记录一下我在正点原子 F429 阿波罗开发板上实现 USB 虚拟串口的过程,希望可以帮助到其他想要学习 USB 的人。

首先,我更新了一下 RT-Thread 的源代码(因为 RT-Thread 的代码更新很快,短时间内就有可能有很多的代码更新)。
然后我进入 rt-thread\bsp\stm32目录下,找到了正点原子 F429 阿波罗开发板对应的BSP stm32f429-atk-apollo。

然后我先看了一下这个 BSP 当前支持不支持 USB。我在目录下打开 Env 工具,输入 menuconfig 命令,查看了一下,发现在硬件配置的片上外设的配置菜单中没有配置 USB 的选项,看来这个 BSP 还不支持 USB 设备。

然后我想到,新的 STM32 BSP 所有的 BSP 都是用的同一份驱动,我去看一下有没有做好的 USB 驱动吧。然后我就打开了 rt-thread\bsp\stm32\libraries\HAL_Drivers 目录,如下所示,发现里面果然有 usb 的驱动文件,叫做 drv_usbd_fs.c。这就很好办了。

打开同一目录下的 Sconscript 脚本文件,查看一下这个驱动依赖什么配置,发现依赖于 BSP_USING_USBD_FS 这个配置。

既然有驱动,就一定有 BSP 已经支持了这个功能,我搜索了 stm32 目录下所有的 BSP ,看哪个 bsp 下有这个配置项。顺便看一下依赖关系。发现 F469 的 bsp 有这个配置项,看起来打开这个配置的同时,利用 select 命令也打开了 RT_USING_USB_DEVICE 这个配置。有了这段示例就好说了,只要在正点原子阿波罗的 bsp 下也添加这段配置就好了。

修改正点原子 F429 阿波罗 bsp 下 Kconfig 文件,添加这一段配置项。



然后就可以利用 Env 工具配置工程了。在 目录下输入 menuconfig 配置 usb,开启刚添加的 usb 驱动的配置项。

然后,配置 usb 的设备框架。开启虚拟串口。

然后保存并重新生成工程。 发现编译报错。看起来是硬件没有配置。需要打开 stm32CubMX 配置 usb 的硬件引脚。

打开 stm32f429-atk-apollo\board\CubeMX_Config 目录下 stm32CubMX 的工程,配置 usb.



发现开启 usb 功能之后,时钟配置报警告,我们再重新配置一下时钟。配置好之后,重新生成了一下代码。

由于更新了时钟树,所以还要把stm32f429-atk-apollo\board\CubeMX_Config\Src目录下main.c中的时钟配置函数SystemClock_Config更新到stm32f429-atk-apollo\board目录下的 board.c 文件中。

然后重新打开工程,编译,还是报错,cannot open source input file "stm32f4xx_hal_exti.h": No such file or directory ,我注释掉这个头文件重新尝试编译。再次编译,发现就没有问题了。


下载运行,然后输入 list_device 命令可以看到注册到系统中的两个 usb 相关的设备。

然后我在 main函数里添加了一段测试代码,编译下载运行。
#include <rtthread.h>
#include <rtdevice.h>

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;
}

连接开发板上的 USB_SLAVE 接口到电脑上,打开设备管理器,发现多了一个 USB 串行设备,用串口工具打开,就接收到 main 函数里发送过来的消息了


这样就在正点原子 F429 阿波罗开发板上实现了 USB 虚拟串口了。

关注一下更多精彩内容

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

144

帖子

0

粉丝