簡體   English   中英

STM32f103 HAL USB - UART 橋接器

[英]STM32f103 HAL USB - UART bridge

我有一個 UART 可編程的第三方設備。

我需要創建一個帶有功能密碼的 USB - UART 橋接器(只有在輸入正確的密碼后才能編程)

使用最新版本的 STM32CubeMX for Atollic TrueSTUDIO for STM32 9.3.0 生成代碼......當我嘗試傳輸時,我通過緩沖區(一個用於 usb-uart,另一個用於 uart-usb)在 USB 和 UART 之間傳輸數據幾個字符一切正常,但是當我嘗試傳輸一個大數據包時,由於 USB 速度遠高於 UART 的事實,問題開始了......

有兩個問題:

1.如何告訴USB我需要停止傳輸數據並等待UART(緩沖區)忙

2.單片機端如何獲取PC上設置的波特率(終端連接虛擬COM口時設置)

USB 提供流量控制。 這就是你需要實施的。 可以在此處找到一般介紹:

https://medium.com/@manuel.bl/usb-for-microcontrollers-part-4-handling-large-amounts-of-data-f577565c4c7d

基本上,USB-to-UART 方向的設置應該是:

  1. 表示代碼已准備好接收 USB 數據包
  2. 接收USB數據包
  3. 表示您不再准備接收 USB 數據包
  4. 通過UART傳輸數據
  5. 重來

步驟 0:初始設置

調用USBD_CDC_SetRxBuffer設置接收 USB 數據的緩沖區。 除非您使用多個緩沖區來實現更高的吞吐量,否則在程序開始時調用一次就足夠了。

第 1 步:准備接收數據

調用USBD_CDC_ReceivePacket 與名稱所暗示的不同,此函數表示應用程序已准備好接收數據。 它在實際接收到數據之前立即返回。

第二步:接收USB數據包

你不需要在這里做任何事情。 它會自動發生。 完成后,將調用CDC_Itf_Receive

第 3 步:表明您不再准備接收 USB 數據包

無所事事。 每當接收到數據包時,這就會自動發生(並且未啟用雙緩沖)。

第 4 步:通過 UART 傳輸數據

我想你知道如何做到這一點。 是否要以阻塞方式或使用 DMA 進行操作取決於您。

由於涉及回調,您不能將此代碼放入主循環。 如果使用阻塞 UART,則可以將所有代碼放入CDC_Itf_Receive 它將以 2、3、4、1 的順序出現。此外,還需要初始化(0 和 1)。

在 UART 到 USB 的方向上,您需要在 UART 上實現流量控制。 USB 流控制由主機管理。 盡管 USB 比 UART 快得多,但流量控制是相關的,因為主機上的應用程序可以隨心所欲地處理數據。

關於問題2:我不確定我是否理解它......微控制器無法在主機上設置波特率。 主機可以指定波特率(通過 USB 傳輸並應用於 UART),或者如果 UART 具有固定的波特率,您可以忽略波特率(在主機端設置的任何波特率都將起作用,因為它不適用於USB)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM