【STM32】一次F105 USB OTG驱动填坑记录
生活随笔
收集整理的這篇文章主要介紹了
【STM32】一次F105 USB OTG驱动填坑记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用MCU為STM32F105VC,新建工程,使用Keil 自帶ST?std庫,以及ST Legacy usb otg?庫,
問題一為VBUS檢測的設計疏漏
問題二為usb device無法正常枚舉,使用庫中參考工程也是一樣情況,使用CubeMX生成工程驗證了硬件正常,
最終使用Legacy工程和HAL工程運行對比工作狀態發現Legacy中的異常狀態,檢查各處差異,發現驅動中讀取到的系統時鐘數值異常,跟蹤時鐘初始化代碼并對于CubeMX中時鐘樹,發現整個usb的時鐘都是異常的,按照CubeMX中的值調整后一切恢復正常。
問題根源為Keil中CMSIS CORE文件中bug,計算中默認認為F10x CL系列單片機使用25M晶振,導致PLL倍頻因子計算錯誤,最終導致usb時鐘異常。
#ifdef STM32F10X_CL/* Configure PLLs ------------------------------------------------------*//* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz *//* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);按照HSE為8M來計算,將分頻和倍頻因子分別改為2和10.
總結
以上是生活随笔為你收集整理的【STM32】一次F105 USB OTG驱动填坑记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android tuner 教程,真正免
- 下一篇: 图像修复:Object Removal