国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 資料介紹
    • 1、引言
    • 2、問題
    • 3、原代碼為什么能運行?
    • 4、小結(jié)
  • 資料預覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1496 基于 USBD庫CDC Standalone例程中的一個Bug解析

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

LAT1496 基于 USBD庫CDC Standalone例程中的一個Bug解析

453.53 KB

1、引言

當前越來越多的 STM32 芯片支持 USB-PD,目前新提供的 STM32 的 USB 例程中會把USB-PD 和 USB 合在一起。如果有客戶只需要 USB,那就需要剝離 USB-PD。另外,STM32U5 的 Cube 庫中只提供了基于 USBX 的例程,如果客戶要使用基于USB_USBD_Library 則需要到 GitHub 上去下載。

2、問題

2.1. 問題詳情

客戶在開發(fā)其產(chǎn)品過程中,使用了 STM32U575ZIT6Q。因為客戶對 USBX 不熟悉,所以希望 ST 能夠提供基于 ST_USBD_Library 的 CDC_Standalone 的例程,以實現(xiàn)虛擬串口功能。

建議客戶到 GitHub 上去下載:https://github.com/STMicroelectronics/stm32u5-classic-coremw-apps

客戶下載后發(fā)現(xiàn)里邊提供的 CDC_Standalone 的例程是帶有 USB-PD 的,客戶對 USBPD 不熟悉,希望能夠提供給他們不帶 USB-PD 的,所以就需要從這個例程中對 USB-PD 進行剝離。

在對 USB-PD 進行剝離后,并在 usb_device.c 中的 MX_USB_Device_Init()函數(shù)中添加USBD_Start()函數(shù)啟動 USB。

按理說,進展到這一步,USB 就應該可以工作的。事實上,發(fā)現(xiàn)在 NUCLEO-U575ZI-Q板子上測試時,當通過 USB 連接到 PC 后,就會發(fā)現(xiàn)枚舉成功了,PC 可以正常識別到虛擬串口。但是,看起來無法工作,在線調(diào)試時發(fā)現(xiàn)其進入了 Error_Handler(),也就是說,在什么地方出錯了,工作不了。

2.2. 問題分析

查了很多遍,怎么都看不出 USB 的配置哪里有問題,看起來都還好,而且是從原例程剝離時并沒有動 USB 的代碼,覺得有點不可思議。后來實在沒辦法,只好挨個在進入 Error_Handler 的入口處設(shè)斷點,最后終于捕捉到進入Error_Handler 的地方了,為在 CDC_Itf_Init()函數(shù)中以中斷方式啟動 TIM3 的地方出問題了。

覺得很奇怪,這只是以中斷方式啟動 TIM3 而已,為什么會出錯?通過在線調(diào)試,查看上面的 TIM_Config()函數(shù)時,發(fā)現(xiàn)了問題。TIM_Config()函數(shù)內(nèi)容。

2.3. 解決方法

問題找到了后,解決方法也很簡單,就是把 TIM_Config()函數(shù)中的調(diào)用HAL_TIM_Base_Start_IT()的語句去掉,避免重復調(diào)用就可以了。

3、原代碼為什么能運行?

細心的朋友們可能就想到了一個問題:你說原代碼中就有這個 Bug,那為什么原代碼運行得好好的?

這個問題很好,主要是因為在進行 USB-PD 剝離后在編譯時編譯器提示 Error_Handler()重復聲明了,在 IAR 中只是警告,在 Keil 中就直接是錯誤了。

4、小結(jié)

使用 GitHub 上的 https://github.com/STMicroelectronics/stm32u5-classic-coremwapps 軟件包進行基于 USB_USBD_Library 的 STM32U5 的 CDC_Standalone 進行開發(fā)的時候,需要注意到此 Bug。如果在開發(fā)過程中,遇到 Error_Handler(),可以看看是否這里沒有修改。

資料預覽

相關(guān)推薦

郑州市| 霍山县| 德州市| 大安市| 东乡族自治县| 怀来县| 南乐县| 阳朔县| 濉溪县| 隆尧县| 平阴县| 钟山县| 东方市| 星座| 洪洞县| 南乐县| 江口县| 秀山| 梁山县| 明溪县| 葫芦岛市| 特克斯县| 蒲江县| 来安县| 佳木斯市| 大埔区| 丰原市| 广德县| 翼城县| 高雄市| 左云县| 从江县| 曲靖市| 自治县| 尼玛县| 金塔县| 乌什县| 安丘市| 英超| 仙居县| 辽中县|