【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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值