打印
[STM32F1]

【请教】STM32F107 USB HOST 为何进不了中断处理函数

[复制链接]
10875|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dcl2005|  楼主 | 2014-12-4 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近调试STM32F107 USB HOST 读U盘功能,插上U盘后检测不到设备插入
1、在中断处理函数处加了一条print,没有打印,说明没有触发中断;
2、量了一下管脚,没插入U盘时两个脚均为低,接上U盘后D+为高,D-为低,同时5V供电正常;
3、查了下手册以及官网的程序,官网的程序应该是按照25M晶振写的,我用的是8M晶振,于是按照用户手册TABLE 69 修改了时钟配置,还是不行,代码如下:
                RCC_HCLKConfig(RCC_SYSCLK_Div1);
                RCC_PCLK2Config(RCC_HCLK_Div1);
                RCC_PCLK1Config(RCC_HCLK_Div2);
                RCC_ADCCLKConfig(RCC_PCLK2_Div6);
                RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE , RCC_PREDIV1_Div1);
                RCC_PLLConfig(RCC_PLLSource_PREDIV1 , RCC_PLLMul_9);
                RCC_PLLCmd(ENABLE);
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA , ENABLE);
                RCC_PLL2Cmd(DISABLE);
                RCC_PLL3Cmd(DISABLE);

                RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
4、硬件连接方法:只接了D+和D-,接口的5V没有通过引脚控制,一直保持上电状态,同时ID和VBUS是悬空的(实际上该两个管脚跟UART1复用,我占用作UART1了),接口用的是普通的USB A母座,而不是OTG座


主要疑惑点:
1、F107是怎么区分OTG还是单纯的HOST的呢?因为HOST不需要ID和VBUS脚,我硬件这么接是否有问题
2、检测不到U盘插入,主要会是什么原因呢,目前我主要怀疑是硬件连接错误或者是USB初始化有问题
3、请帮忙看下我的硬件连接和USB初始化是不是有问题呢?其他的库文件用的都是官网的库,应该大家都是一样的

多谢大家帮忙哈
沙发
dcl2005|  楼主 | 2014-12-4 23:32 | 只看该作者
主要是排查了一天了,实在找不到思路了,按老路又找不到新线索,大家给点建议,或者解答下疑惑吧。
另补充:
1、中断设置:
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

2、HSE_VALUE已修改:
#if !defined  HSE_VALUE
#ifdef STM32F10X_CL   
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#else
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */

使用特权

评论回复
板凳
airwill| | 2014-12-5 08:49 | 只看该作者
接上U盘后D+为高,D-为低, USB 系统是通过检测这两条线的电平来识别设备的插入(并判断低速/全速设备的)

使用特权

评论回复
地板
dcl2005|  楼主 | 2014-12-6 22:32 | 只看该作者
ok,问题解决了

换了个晶振,在官方例程上可以跑起来了,但是移植到自己的工程里面总是不成功

后来对比工程文件,发现官方例程多了个stm32fxxx_it.c,里面定义了延时函数和中断处理函数

不过这点ST公司就有点蹉了,因为这个stm32fxxx_it.c是必须的文件(看这名字也以为是标准库文件),但是在USB Libraries 里是没有的的,只有例程里面加了这个文件。

对于俺这个新手来说,这点问题折腾了好久。。。。。。。

使用特权

评论回复
5
dcl2005|  楼主 | 2014-12-6 22:36 | 只看该作者
我不是刷分哇,只是想问下:既然自己解决了,这个积分还能拿回来么

使用特权

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

本版积分规则

2

主题

8

帖子

0

粉丝