打印

STM32107无法跑USB例程

[复制链接]
7751|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
saystar|  楼主 | 2012-5-8 17:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用STA32103ZE的板跑的完全正常,但是换到107下面丫连USB中断都进不去。就是用例程也是只提示无法识别设备。难道107还有什么特殊的地方需要更改吗?
沙发
jxmzzr| | 2012-5-8 22:45 | 只看该作者
这块玩的人还真不多,问类似的问题的人也不少,请版主给搞定吧。

使用特权

评论回复
板凳
JasonWangFAE| | 2012-5-9 09:11 | 只看该作者
Maybe you can check external Oscicallor .

使用特权

评论回复
地板
saystar|  楼主 | 2012-5-9 10:06 | 只看该作者
不是晶振的问题,我两块板都用的8M晶振。。。。

使用特权

评论回复
5
vigia| | 2012-5-9 11:10 | 只看该作者
107和103的USB IP完全不同

LZ你不会跑了同一个USB程序吧。。。

使用特权

评论回复
6
saystar|  楼主 | 2012-5-9 12:09 | 只看该作者
:L我是用同一个地说。。。难道103的USB代码不能在107上跑????那我不是要完全重做USB?在哪里能找到例程啊?107不是10x系列吗????

使用特权

评论回复
7
香水城| | 2012-5-9 12:25 | 只看该作者
107的USB可以看这个:"STM32F105/107, STM32F2 and STM32F4 USB on-the-go Host and Device Library"
http://www.st.com/internet/com/S ... host-device_lib.zip

使用特权

评论回复
8
saystar|  楼主 | 2012-5-11 17:08 | 只看该作者
例程的USB完全无动作。我查了一下发现在USB——bsp.c文件里面对USB端口定义如下:
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
#ifndef USE_STM3210C_EVAL
  GPIO_InitTypeDef GPIO_InitStructure;   
#endif
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef USE_STM3210C_EVAL

  RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;

#else // USE_STM322xG_EVAL  
  
#ifdef USE_USB_OTG_FS

  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE);  
  
  。。。。。

也就是说你的预编译定义了“USE_STM3210C_EVAL”的话就不对USB的PORTA做初始化。可是在项目预定义却定义了这个“USE_STM3210C_EVAL”,结果我的板上USB连响应都没有。。。。难道用这个库就不用定义USB的PORTA了吗?因为我有一条GPIO来控制USB上拉我尝试强行加入原来的GPIOA定义。结果就是找不到设备。。。无解地说。。。
以下代码是更改后找不到设备:
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
#ifndef USE_STM3210C_EVAL
  GPIO_InitTypeDef GPIO_InitStructure;
#endif
#ifndef USE_ULPI_PHY
#if defined(USB_OTG_FS_LOW_PWR_MGMT_SUPPORT) || defined(USB_OTG_HS_LOW_PWR_MGMT_SUPPORT)
  EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
#endif
#endif

#ifdef USE_STM3210C_EVAL
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphResetCmd(  RCC_APB2Periph_GPIOA
                         | RCC_APB2Periph_GPIOC
                         | RCC_APB2Periph_AFIO, DISABLE);
  RCC_APB2PeriphClockCmd(  RCC_APB2Periph_GPIOA
                         | RCC_APB2Periph_GPIOC
                         | RCC_APB2Periph_AFIO, ENABLE);
  // Configure PA11, PA12 as USB lines
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  // Configure PG11 USB connect.
  GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_SET);
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_RESET);
  RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;

#else // USE_STM322xG_EVAL

#ifdef USE_USB_OTG_FS
。。。。。。

使用特权

评论回复
9
vigia| | 2012-5-11 17:14 | 只看该作者
USE_STM3210C_EVAL的预定义就是说明你使用的是STM32F107开发板

另外,你说对了,STM32F107不需要对USB的I/O口做初始化,也不需要外接上拉电阻

说了不是同一个IP了,不要用同一个IP的思维去考虑他么

使用特权

评论回复
10
saystar|  楼主 | 2012-5-11 17:33 | 只看该作者
因为我的板是按照普通USB的模式接了VBUS、D+、D-、和GND而ID脚是悬空的。这样跑跑不起来那该怎么办呢?不同的IP我理解,可是完全不向下兼容原来的板子等于作废了啊。。。。

使用特权

评论回复
11
saystar|  楼主 | 2012-5-11 18:31 | 只看该作者
我只想用device模式而不是OTG模式,例程无法跑起来的原因是否是由于它是OTG模式下的呢?有哪位同志知道怎么将例程改为device模式也就是不用ID脚也可以跑起来啊?

使用特权

评论回复
12
liulwn| | 2012-5-21 19:54 | 只看该作者
学习下

使用特权

评论回复
13
vigia| | 2012-5-22 09:38 | 只看该作者
我只想用device模式而不是OTG模式,例程无法跑起来的原因是否是由于它是OTG模式下的呢?有哪位同志知道怎么将例程改为device模式也就是不用ID脚也可以跑起来啊? ...
saystar 发表于 2012-5-11 18:31

例程分三种,分别是DEVICE模式,HOST模式和OTG模式。

你用DEVICE模式,是不需要改代码的。

另外,我估计是你的硬件连接问题,为什么GND不接?ID倒是不要接的。你根据DATASHEET上的连接图接呀。

使用特权

评论回复
14
saystar|  楼主 | 2012-5-22 09:47 | 只看该作者
本帖最后由 saystar 于 2012-5-22 09:49 编辑

13# vigia

GND当然已经接了,可以确认的是硬件没问题。我已经确认在啦VBUS上拉后可以触发到USB中断。问题是中断发生后bus hound没有任何返回数据。
还有我确实用的例子是device目录下的。。。。
要不哪位兄弟提供一个107可以跑device的例程链接啊?

使用特权

评论回复
15
saystar|  楼主 | 2012-5-22 12:21 | 只看该作者
确实是频率原因,我的板PLL是8M例程是25M要改RCC

使用特权

评论回复
16
luckypwp| | 2012-6-30 11:57 | 只看该作者
107和103的usb部分不一样,107可以otg,库结构不同。

使用特权

评论回复
17
wang168506| | 2015-6-11 17:27 | 只看该作者
saystar 发表于 2012-5-11 18:31
我只想用device模式而不是OTG模式,例程无法跑起来的原因是否是由于它是OTG模式下的呢?有哪位同志知道怎么 ...

楼主 你弄好了么?这块我要愁死了啊,这个预定义之后的代码岂不是改起来累死人呀

使用特权

评论回复
18
wang168506| | 2015-6-12 14:17 | 只看该作者
saystar 发表于 2012-5-11 18:31
我只想用device模式而不是OTG模式,例程无法跑起来的原因是否是由于它是OTG模式下的呢?有哪位同志知道怎么 ...

楼主你改好了么?我现在也急求这部分解决办法呀  识别不了,怎么办?

使用特权

评论回复
19
尤彼卡| | 2015-6-12 20:52 | 只看该作者
学习了,

使用特权

评论回复
20
hua186078| | 2017-6-16 14:45 | 只看该作者
楼主龙好了吗?

使用特权

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

本版积分规则

个人签名:生在中国又卒于中国,真是祸不单行啊!

19

主题

238

帖子

0

粉丝