从 STM32 Nucleo-F767ZI [Ubuntu] 中的 USB 虚拟 COM 读取数据

Posted

技术标签:

【中文标题】从 STM32 Nucleo-F767ZI [Ubuntu] 中的 USB 虚拟 COM 读取数据【英文标题】:Read data from USB Virtual COM in STM32 Nucleo-F767ZI [Ubuntu] 【发布时间】:2021-04-15 05:54:31 【问题描述】:

我编写了一个程序来通过USB端口CN13传输数据,使用这个video。我无法看到 USB 虚拟 COM 端口上的数据。当我连接 ST-LINK 和虚拟 COM 端口时,只有一个 USB 设备 ST-LINK 在尝试dmesg | grep usb 时被识别。我在 YouTube 上看到了许多基本的examples,这表明虚拟 COM USB 端口检测是在没有安装任何驱动程序的情况下发生的。 STM32 MOOCs 使用 Windows,但我安装了 Ubuntu 20.04。我已经尝试了一些堆栈溢出solutions。谁能指导我如何克服这个问题?

【问题讨论】:

虚拟串行连接应显示为/dev/ttyACM0(或类似名称)。有这样的设备吗?为了查看串行输出,您需要使用终端程序。你用的是什么程序,能连接到/dev/tty...设备吗? 是的,我得到 /dev/ttyACM0 ,它对应于 ST-LINK,当通过 dmesg 进行检查时......但不是虚拟 COM 端口...... “但不是虚拟 COM 端口”是什么意思? /dev/ttyACM0 是虚拟串行端口(或 Windows 术语中的 COM 端口)。再说一遍:您使用或计划使用什么终端程序? Nucleo-144 F767ZI板子有两个USB口,一个是用来刷程序的,检测为ST-LINK,另一个是通信用的,是CN13针,应该是检测到的作为我的 ubuntu 中的虚拟 COM 端口。我正在使用默认终端查看 USB 设备并串行读取数据,我打算使用应用程序 CoolTerm 我正在编写一个简单的程序来在打开 stm32 并尝试从 USB 端口读取数据时发送 hello world 字符串...我按照上面提到的示例链接进行操作,但我无法查看数据流... 【参考方案1】:

我找到了一种使用 USB 端口进行通信的方法。这是使用 STM32CubeIDE 完成的

    启动 STMCubeIDE 软件。 选择 USB_OTG_FS 并设置为仅设备模式。 然后在中间件选项卡中选择 FS IP 的类作为通信设备类(虚拟 com 端口)。 将 USB 的时钟频率设置为 48MHz。 生成项目。 读取 usbd_cdc_if.c 文件 在 main 中包含 usbd_cdc_if.h 并使用 CDC_Transmit_FS 发送一些数据 在 Ubuntu 中,打开终端并使用 ls /dev/tty 搜索两个 ACM 端口,ACM0 和 ACM1/ACM2(分别是 STLINK-V3 和 Virtual ComPort) 使用串口终端进行测试(如 Arduino IDE 的串口监视器)。

【讨论】:

以上是关于从 STM32 Nucleo-F767ZI [Ubuntu] 中的 USB 虚拟 COM 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

定时器触发的STM32F767ZI双ADC模式

修复可能由于 STM32 Nucleo-F334R8 上的 malloc 导致的内存覆盖错误

在 stm32 f767zit 上未正确生成 PWM 信号

在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

STM32F7:ADC DMA 传输只工作一次

STM32F767 Nucleo 板 printf 到控制台