首页 > 解决方案 > 使用 Mbed 库在 STM32 和 PC 之间设置串行 USB 通信

问题描述

我有一个STM32 f401RE。我正在使用Mbed 库来设置从 STM32 到 PC 的连接。我想通过串行向电路板发送一个字符序列。作为答案,我希望 LED 闪烁。例如:led1结果LED ONled2结果LED OFF

问题是我不知道如何设置连接端口。

#include "mbed.h"
#include "USBSerial.h"

//Virtual serial port over USB
USBSerial serial;

int main(void) {

    while(1)
    {
        serial.printf("I am a virtual serial port\r\n");
        wait(1.0);
    }
}

您可以使用 USBSerial 接口通过 USB 模拟串行端口。您可以将此串行端口用作额外的串行端口或用作调试解决方案。它还在 Mbed 和计算机之间进行通信。

我想做以上所有事情(即使我不知道什么是通过 USB 模拟串行端口的。那个虚拟 USB 是什么?)。

我看到USBSerial构造函数需要 USBSerial (bool connect_blocking=true, uint16_t vendor_id=0x1f00, uint16_t product_id=0x2012, uint16_t product_release=0x0001). 而且我认为我需要修改其中的一些地址。问题是Windows端口在设备管理器中用COMxxLinux表示ttyACMxx。我将如何在六进制地址中转换它 - 这是我必须做的吗?

标签: c++serial-portstm32mbednucleo

解决方案


您不必转换任何东西或弄乱 USBproduct_idvendor_idmbed 串行端口应该显示为任何其他串行端口,因此如果它不适合您,则意味着您遇到了驱动程序问题。

在最新的 Linux 发行版上,设备应显示类似于以下内核消息的内容:

 cdc_acm 5-2:1.1: ttyACM0: USB ACM device
 usbcore: registered new interface driver cdc_acm
 cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters

在 Windows 上,您可能需要安装驱动程序。完成此操作后,串行端口应显示mbed Serial Port (COMx)在您的设备管理器上。有很多地方可以获得故障排除帮助,例如,请参见此处。

您在 Windows 和 Linux 上都一无所获这一事实让人怀疑您是否使用了正确的电缆(有些 USB 电缆仅用于充电,不适合您的目的,而另一些则在一段时间后就失效了)。我首先要确保您的电缆可以与其他设备一起使用(显然不是仅用于充电)。你的电路板也有可能坏了(或来自工厂),但这不太可能。


推荐阅读