![]() |
發布時間: 2023-8-10 17:29
正文摘要:請教一個問題,串口助手用USB轉232線(圖2)進行通訊時,115200波特率可以發送不限長度的數據,STM32的空閑中斷都能當成一幀數據。但是用256000/460800等更高波特率時,一旦超過64字節,就會在接收到64字節時就發生 ... |
123156fsadf 發表于 2023-8-11 10:31 或許這時走在【爆倉】的邊界內側,短時間內不一定能發現。或許偶爾會發產一次。 不過你已知道大致的通訊頻率邊界,多留一點富裕量,安全一點。 因為,使用環境的不同,溫度,電磁場,線路的阻抗……會有所不同,包括通訊對象的內部時間基準誤差,都會產生脈沖信號的邊沿誤差(上下邊沿決定上限頻率)。 |
可能是轉換器的問題 USB轉232通信方式不一樣 數據可能是打包一下過去的 你用不同方案的轉換器通信效果有差別 我就碰到過CH340轉485的線和我做的ModbusRTU模塊通信就問題多 用別的就好了 單片機一樣的程序 |
本來就不應該以空閑中斷來判斷幀的結束,這在很多應用都會出問題的。 |
yzwzfyz 發表于 2023-8-11 10:18 有點奇怪,圖1的器件進行通信就沒有問題,用圖2的線才會出現這個問題。兩個都是usb轉232芯片 |
USB與323通訊速率不同,中間必有一個差速器【中轉站】,站內也必有一個【倉】,流通慢時,【倉】夠用,看不出問題;流通快時,速差的積累就體現出來了,會滿【倉】。 樓主:您的猜想我贊同。 不過【倉】未必是64字節,但至少不低于64。只不過,發生擠【倉】時,它保證出【倉】的64個是正確的,因擠【倉】發生丟失的部分不再續發,或報警。 只要是通訊的雙方存在速率差異,用緩沖【倉】進行通訊【同步】的通訊,就總存在一個【倉】量,以及擠【倉】的時機。 |
Hephaestus 發表于 2023-8-10 23:07 不是STM32緩存長度的問題,我同樣的程序,用DMA接收不定長的數據,115200波特率可正常接收超過64字節的數據,用460800,只能接收到64字節就觸發空閑中斷了。我懷疑是這個232芯片內部緩存只有64字節,發完64字節后要等待一會才會發后面的內容。導致接收到的數據不完整。我用圖2所示的線就會出現這個問題,用圖1所示的器件就沒這個問題。問題只可能出現在那根線上,后面我又買了一根其他店的usb轉232線,也有這個問題 |
STM32一側的緩存長度是你自己定義的,問大家干什么? |