Usb

ttyACM0 已連接但未顯示接收到的數據

  • December 11, 2019

我有一個 STM32F4 微控制器,帶有 USB 介面,我將它連接到樹莓派。連接後,顯示為/dev/ttyACM0。我每秒從設備發送一些字元。

在 Windows 中,使用膩子,一切正常。我很好地收到了字元。

在樹莓派上,如果我執行命令:

>> sudo tail -f /dev/ttyACM0  

它不會在螢幕上顯示任何內容。在我的調試器中,我確實看到設備沒有“掛起”,看起來它正在正確發送。

如果tail命令未執行,則設備(使用簡單程序)會掛起,並且看門狗定時器會超時。

這種行為似乎很正常,因為當膩子未列出時,我在 Windows 中也有相同的症狀。

如何顯示發送的字元?

這是權利的問題嗎?我應該使用其他程序嗎?我確實嘗試了來自論壇的一些建議:更改99-com.rules, set all rights to/dev/ttyACM0 中的規則,但沒有運氣。

PuTTY 是一個終端仿真器,因此絕對是為一次處理單個字元而設計的。

tail另一方面,由於命令的設計,或者因為 TTY 驅動程序正在緩衝輸出(除非其預設設置被覆蓋),預設情況下可能期望完整的字元行。

您可以使用更了解 TTY 驅動程序和串列埠性質的程序,例如minicomcu. 如果您發現它們可以工作但不適合您的使用,stty -a -F /dev/ttyACM0則可以在其中任何一個使用埠時使用列出 TTY 設備設置,然後stty在使用之前使用命令重現這些設置tail -f。您可能需要這樣的東西來禁用在此案例中不需要的所有 TTY 設備預設功能:

stty -F /dev/ttyACM0 -crtscts ignbrk -icrnl -onlcr -ixon -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

注意:stty選項語法很陳舊,每個選項關鍵字前面的減號會禁用對應的 TTY 設備選項;使用不帶減號的關鍵字將啟用它。

如果事實證明tail您正在使用的命令版本(可能來自 GNUcoreutils包,但也可能來自busybox您在 RasPi 中執行的確切發行版)完全面向行且無法更改,那麼它可能仍然不適合這項工作,除非微控制器發送的字元不時包含 Unix 樣式的換行符。(如果微控制器發送的是 CR 而不是 LF,那麼如果您啟用該icrnl選項,TTY 驅動程序可以為您修復它。)

引用自:https://unix.stackexchange.com/questions/556637