打印

求助 STM32F105 USB Host问题

[复制链接]
4261|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxcxzlm|  楼主 | 2012-10-25 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STM32F105作读U盘,使用官网上下的stm32f105_107_usb_fw.zip包。

软件包使用的晶振是25M,我板上的晶振是8MHz。
我只是将#define HSE_VALUE    ((uint32_t)25000000)修改成了#define HSE_VALUE    ((uint32_t)8000000)

但在实际运行的时候都是在HOST_ENUM处出错。
每次都不成功。

各位大虾们有使用过的USBHOST的帮忙指点一下。谢谢!
沙发
lxcxzlm|  楼主 | 2012-10-25 11:36 | 只看该作者
没有人帮忙,自己先顶一个。

使用特权

评论回复
板凳
lxcxzlm|  楼主 | 2012-10-25 12:04 | 只看该作者
再顶一个。

使用特权

评论回复
地板
zgzzlt| | 2012-12-16 15:34 | 只看该作者
楼主,问题解决了吗?我用stm32f207调试USB Host读写u盘时,也是枚举出错。

使用特权

评论回复
5
lxcxzlm|  楼主 | 2012-12-24 09:04 | 只看该作者
当时是时钟设置不对。

使用特权

评论回复
6
JasonWangFAE| | 2012-12-24 10:13 | 只看该作者
你是使用多少板本的USB library??

使用特权

评论回复
7
louisignal| | 2015-11-23 16:24 | 只看该作者
库里面设置系统时钟为72MHz的函数仅支持外接25MHz晶振,如果是8MHz晶振,请这样修改:在system_stm32f10x.c中找到 static void SetSysClockTo72(void)函数,将其中的代码:
    /* 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);
  
    /* Enable PLL2 */
    RCC->CR |= RCC_CR_PLL2ON;
    /* Wait till PLL2 is ready */
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }
   
   
    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
                            RCC_CFGR_PLLMULL9);
改成:
                /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
                /* PREDIV1 configuration: PREDIV1CLK = HSE = 8 MHz */
    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV1SRC_HSE | RCC_CFGR2_PREDIV1_DIV1);

    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
                            RCC_CFGR_PLLMULL9);
即可!

使用特权

评论回复
8
稳稳の幸福| | 2015-11-23 19:56 | 只看该作者
因为不止那一个地方跟时钟源有关系,后面也有配置时候要使用那个数据的,可能没有调用宏,或者调用宏后也无法实现,需求其他的选择。

使用特权

评论回复
9
huangcunxiake| | 2015-11-23 22:24 | 只看该作者
需要通过配置PLL提高速度,才可以稳定USB的时钟信号,要不时钟信号跟不上,所以就不行

使用特权

评论回复
10
gejigeji521| | 2015-11-23 23:24 | 只看该作者
如果真不会配置USB时钟,就花两毛买个新的晶振安装上。

使用特权

评论回复
11
阳春白雪L| | 2016-1-27 11:05 | 只看该作者
louisignal 发表于 2015-11-23 16:24
库里面设置系统时钟为72MHz的函数仅支持外接25MHz晶振,如果是8MHz晶振,请这样修改:在system_stm32f10x.c ...

谢谢,按照你的方法,可以枚举成功了,是时钟配置的问题

使用特权

评论回复
12
zhuotuzi| | 2016-1-27 11:52 | 只看该作者
你只是改了开头那个宏,后面应该有一些是需要计算后确定的时钟,所以你要都找一找。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

5

帖子

1

粉丝