从 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 读取数据的主要内容,如果未能解决你的问题,请参考以下文章
修复可能由于 STM32 Nucleo-F334R8 上的 malloc 导致的内存覆盖错误