stm32f105 做 usb host 怎么初始化IO口

2019-03-23 17:35发布

用stm32f105做usb主机读写u盘,usb接口电路如下图,但不知道这样是否可行?
如果可行,GPIO应该如何做初始化?(我在测试的时候,D+和D-在插入U盘前后都是低电平,没有变化)
如果不可行,原因何在?
求助
usb.png
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
TOALTERA
2019-03-23 22:38
原本问题解决了,是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);
复制代码

一周热门 更多>