[求助] stm32f105 做 usb host 怎么初始化IO口

TOALTERA   2017-7-12 15:19 楼主
用stm32f105做usb主机读写u盘,usb接口电路如下图,但不知道这样是否可行?
如果可行,GPIO应该如何做初始化?(我在测试的时候,D+和D-在插入U盘前后都是低电平,没有变化)
如果不可行,原因何在?
求助
usb.png

回复评论 (5)

补充:我在测试的时候,USB_CONNECT设置了高电平,即Q1是截止的
点赞  2017-7-12 15:25
原本问题解决了,是Vbus那边没有足够的电压,导致插入usb时电平没有被拉高。
但现在一但插入U盘,stm32就抛一个硬错误 HardFault_Handler出来,连 OTG_FS_IRQHandler()中断都没有进去~
求解???
以下是代码部分:
GPIO配置部分代码
  1.         GPIO_InitTypeDef GPIO_InitStructure;  
  2.        
  3.         USB_GPIO_APBxClock_Fun(RCC_APB2Periph_AFIO, ENABLE);
  4.         //DM GPIO
  5.         USB_GPIO_APBxClock_Fun(USB_GPIO_DM_CLK, ENABLE);
  6.         GPIO_InitStructure.GPIO_Pin = USB_GPIO_DM_PIN;       
  7.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  8.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  9.         GPIO_Init (USB_GPIO_DM_PORT, & GPIO_InitStructure );
  10.         //DP GPIO
  11.         USB_GPIO_APBxClock_Fun(USB_GPIO_DP_CLK, ENABLE);
  12.         GPIO_InitStructure.GPIO_Pin = USB_GPIO_DP_PIN;       
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  14.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.         GPIO_Init (USB_GPIO_DP_PORT, & GPIO_InitStructure );
  16.        
  17.         //配置USB时钟48MHz
  18.         RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3); // 72*2/3
  19.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE);

中断配置:
  1.         NVIC_InitTypeDef NVIC_InitStructure;

  2.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  3.         NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
  4.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  5.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  6.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  7.        
  8.         NVIC_Init(&NVIC_InitStructure);

点赞  2017-7-12 17:00
已完成,多看几遍,重新移植一次就都可以用了~自己结帖。
点赞  2017-7-16 08:48
只有自己的问题 自己解决!
点赞  2017-7-22 15:23
l楼主可以分享一下你的代码吗?我有需要
点赞  2017-8-3 11:50
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复