c++ - 使用 Mbed 库在 STM32 和 PC 之间设置串行 USB 通信
问题描述
我有一个STM32 f401RE。我正在使用Mbed 库来设置从 STM32 到 PC 的连接。我想通过串行向电路板发送一个字符序列。作为答案,我希望 LED 闪烁。例如:led1
结果LED ON
,led2
结果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
端口在设备管理器中用COMxx
和Linux
表示ttyACMxx
。我将如何在六进制地址中转换它 - 这是我必须做的吗?
解决方案
您不必转换任何东西或弄乱 USBproduct_id
或vendor_id
mbed 串行端口应该显示为任何其他串行端口,因此如果它不适合您,则意味着您遇到了驱动程序问题。
在最新的 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 电缆仅用于充电,不适合您的目的,而另一些则在一段时间后就失效了)。我首先要确保您的电缆可以与其他设备一起使用(显然不是仅用于充电)。你的电路板也有可能坏了(或来自工厂),但这不太可能。
推荐阅读
- vim - 如何在 neovim 终端中禁用行号?
- r - Plotly R:使用颜色和转换线图
- sql - Postgres索引字节数组列与varchar
- c++ - 如何将 char 变量添加到字符串?
- reporting-services - 根据我表中的某个值计算百分比
- c++ - 如何根据 .first 值从 std::pair 的 std::vector 中删除元素?
- sql - 带有和不带有聚合的 sql 查询
- r - 我可以将具有两列的向量乘以具有三列和 3939 行的数据库吗?
- php - 使用 IPv6 代理的 curl 不起作用。错误:网络不可达
- python - 不存储函数返回值的 multiprocessing.map 的替代方案