• 資料介紹
    • 1、客戶需求
    • 2、基本硬件和 STM32CubeMX 的配置
    • 3、對工程進行完善和修改
    • 4、對代碼進行的測試
    • 5、小結
  • 資料預覽
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1437 選擇USBX 模塊生成USB CDC ACM無PD的項目

03/18 15:29
341
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1437 選擇USBX 模塊生成USB CDC ACM無PD的項目

1.38 MB

1、客戶需求

客戶使用 STM32H563 開發(fā)產(chǎn)品,需要 USB CDC ACM 虛擬串口的工程,并且要求不使用 PD 功能,而我們 STM32CubeH5 代碼庫中是包含 PD 功能的工程。于是協(xié)助客戶解決這個問題,提供給客戶不帶 PD 功能的虛擬串口工程。

在 STM32CubeMX 軟件中,選擇 ThreadX USBX 模塊完成 USB CDC ACM 虛擬串口的工程,并且不使能 PD 功能。

2、基本硬件和 STM32CubeMX 的配置

硬件方面使用客戶開發(fā)板和 NUCLEO_H563ZI 同時來進行軟件開發(fā)。

由于不使用 PD 功能,需要對 NUCLEO_H563ZI 的電路進行改動,在開發(fā)板上PA11,PA12 連接到了使用 PD 功能的 Type-C 接口,因此需要做如下的硬件修改:需要把 SB27、 SB28 上的兩個小電阻換移到 SB22、SB21 的位置,這樣做是把PA11、PA12 連接到開發(fā)板的 CN12 上,然后就可以接 USB 線了。

USB 連接線需要接 GND、D+、D-;在對 NUCLEO_H563ZI 開發(fā)板的調(diào)試中,VBUS沒有連接起來,但客戶開發(fā)板的設計中是需要連接的。以此來告訴 USB Device 端(STM32H563ZI)的軟件工程,USB 線連接到 PC 上了。

3、對工程進行完善和修改

由于 CubeMX 的生成的代碼有限,生成軟件工程后需要對工程進行完善,具體改動如下:

代碼開發(fā)的第一步是將 ST HAL USB 驅(qū)動程序與 USBX 固件連接起來,然后初始化 USB 外設。還需要添加一下必要的代碼,下面藍色部分為需要添加的,綠色部分是生成的代碼,你可以搜索綠色部分快捷收到需要添加的位置,第一步: 在“app_usbx_device.h”添加必須包含的頭文件和需要用到的函數(shù)聲明。

第二步: 在“app_usbx_device.c”添加需要用到的變量和函數(shù)聲明。

第三步:在 app_ux_device_thread_entry 函數(shù)中,添加鏈接驅(qū)動程序和初始化 USB 外設的代碼。

先調(diào)用 MX_USB_PCD_Init()來初始化 USB 外設; 然后使用 HAL_PCDEx_PMAConfig(…)進行配置, 該函數(shù)為 STM32H563 配置專用 USB RAM 內(nèi)存中的 PMA(packet memory area), 在本例中,端點為 0 IN/OUT ( USB 標準控制端點)、端點 3 OUT (CDC 數(shù)據(jù)輸出點)、端點 1 IN (CDC 數(shù)據(jù)輸入端點)和控制端點 2 IN ( CDC 命令端點)。PCD_SNG_BUF 參數(shù)意味著我們?yōu)槎它c使用單個緩沖區(qū),這是必要的,因為我們在雙向模式下使用端點。最后,該函數(shù)的最后一個參數(shù)是 PMA 地址,緩沖區(qū)大小為 64Bytes。

使用內(nèi)存的第一個地址來存儲 BTABLE,它是端點緩沖區(qū)的地址列表。BTABLE 為每個端點存儲8 個字節(jié)。由于 STM32H563 有 8 個端點,因此它最多可以消耗 64 字節(jié)。

在本例中,我們使用從 0 到 3 的端點,因此可以不使用剩余的其余部分。如果需要可以減少 TXEp 0 緩沖區(qū)的偏移量,優(yōu)化內(nèi)存的使用。但是,按照這個表,您可以毫無問題地分配所有 8 個端點緩沖區(qū)。

CDC 類的配置描述符一般包含一個接口 0(Interface 0),一個控制接口,另外一個是數(shù)據(jù)接口(Interface 1), 除此之外, IAD(Interface Association Description),這個是可選的,根據(jù)實際情況來確定是否需要。

下一個調(diào)用的函數(shù)是 ux_dcd_stm32_initialize(…),它負責將 HAL USB 驅(qū)動程序鏈接到 USBX 應用程序。最后,我們調(diào)用 HAL_PCD_Start(..)來啟動 USB PCD 外設。

第四步:在 app_usbx_device.c 中 MX_USBX_Device_Init(…)函數(shù)的最后用戶代碼部分,創(chuàng)建兩個線程來處理數(shù)據(jù)的寫和讀,以及一個消息句柄,具體的代碼如下:最后一個參數(shù)為 TX_DONT_START,意思是任務先掛起,之后再啟動。

第五步:下面的 usb_connect()函數(shù)是根據(jù)客戶需要設計的。在 PC 端連接到設備端STM32H563,VBUS 連接時觸發(fā)中斷后調(diào)用的函數(shù)(客戶產(chǎn)品中把 VBUS 分壓后連接到一個 GPIO口,由于客戶第一版本的 PCB 沒有設計這部分電路,因此調(diào)試時使用按鍵中斷替換了 Device 連接到PC 的情況)。Usb_disconnect()函數(shù),是處理 STM32H563 從 PC 斷開的情況(調(diào)試時使用按鍵再次按下來替換 VBUS 斷開的具體功能)。

第六步 ,在 ux_device_cdc_acm.h 文件并添加必要的頭文件包含和函數(shù)聲明。

第七步 ,在 ux_device_cdc_acm.c 添加私有變量 并在“USBD_CDC_ACM_Activate”初始化。

這樣,我們已經(jīng)有了 USB 應用程序的功能。類資源在 ux_device_cdc_acm.c 文件中可用。

第八步:在“ux_device_cdc_acm.c”中定義線程的實現(xiàn)程序。

4、對代碼進行的測試

對軟件工程添加代碼后就可以進入編譯和調(diào)試環(huán)節(jié)。

客戶第一版的硬件產(chǎn)品板上無PC13按鍵,要手動觸發(fā)按鍵中斷,需要在下面藍色欄中寫‘1’,然后按下鍵盤中的回車鍵來模擬按鍵按下的動作。(NUCLEO_H563ZI 硬件有這個按鍵,可以直接使用這個按鍵來生成按鍵中斷)

5、小結

具體的軟件工程放在了附件中,使用 NUCLEO_H563ZI,然后修改硬件就可以進行測試。

資料預覽

相關推薦