使用Mbed库在STM32和PC之间设置串行USB通信

我有一个STM32 f401RE。我正在使用Mbed library设置从STM32到PC的转换。我想通过串行发送一个char序列到板。作为一个答案,我希望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上的端口在设备管理器中用COMxx表示,在Linux上则用ttyACMxx表示。我将如何转换为六种地址-这是我要做的吗?

yoyocom_33 回答:使用Mbed库在STM32和PC之间设置串行USB通信

您不必进行任何改动或弄乱USB product_idvendor_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)。您可以在许多地方获得故障排除帮助,例如,参见here

在Windows和Linux上都收不到任何东西的事实使您怀疑是否使用了正确的电缆(某些USB电缆仅用于充电,对您的用途没有好处,而另一些在一段时间后就失效了) 。我首先要确保您的电缆可与其他设备配合使用(显然不能仅用于充电)。您的电路板也有可能变坏了(或来自工厂),但这不太可能。

,

忽略该“ b”。您的设备看不到“ b”。它只是由串行终端实用程序打印。我还要提到我从您的问题中得到的是,您想通过串行从PC向板发送一些数据,如果设备接收到该数据,它应该开始闪烁LED。如果正确,请使用以下代码:

#include "mbed.h"

Serial pc(USBTX,USBRX); // tx,rx
DigitalOut led(LED1);    // If blinking doesn't work with LED1,Check the pin map for your board and pass the LED pin instead of LED1

char token = 'a';        // This is the character that you should send to trigger blinking
bool startBlinking = false;

int main() {
    pc.baud(9600);

    while(1)
    {
        if (pc.getc() == token) {
            startBlinking = true;
        }
        if (startBlinking) {
            led = 1;
            wait(0.2);
            led = 0;
            wait(0.8);
        }
    }
}
,

我刚刚找到了这种方法,它正在起作用。我不明白的是为什么在我的电脑上我收到此消息:b'Hello World!\n'

#include "mbed.h"

Serial pc(USBTX,rx

int main() {
    pc.baud(9600);

    while(1)
    {
        pc.printf("Hello World!\n");
        wait(0.1);
    }
}
本文链接:https://www.f2er.com/3154475.html

大家都在问