OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4672|回复: 1

stm32F4的USB_HS如何工作在FS模式

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2025-1-16
在线时间
15 小时
发表于 2017-2-23 22:36:54 | 显示全部楼层 |阅读模式
10金钱
现在自己画了一块stm32F4的板子,板子上有USB主机(host)接口、USB从机(device)接口,让stm32F4的USB同时工作在主机模式和从机模式,PA11的OTG_FS_DM接从机usb的D-脚,PA12的OTG_FS_DP接从机usb的D+脚,此USB接口连接到电脑上,让stm32工作在从机模式;PB14的OTG_HS_DM接主机usb的D-脚,PB15的OTG_HS_DP接主机usb的D+脚,此USB接口连接usb hid 设备(如鼠标),让stm32工作在主机模式。现在我的从机模式PA11、PA12工作正常,但是主机模式PB14、PB15不能正常工作,插上鼠标后不能枚举出鼠标。查资料,USB OTG HS在不外接PHY的情况下可以当FS(全速)使用,于是我再定义两个宏,USE_USB_OTG_HS,USE_EMBEDDED_PHY,并且在usbh_conf.h里的#define USBH_MSC_MPS_SIZE 定义成64(HS模式是512,FS模式是64),怎么还是不能识别出鼠标设备,请问哪里的配置不对,或者我的思路不对吗,求USB大神!相应的配置代码如下:

USBH_Init(&USB_OTG_Core_dev,USB_OTG_HS_CORE_ID,&USB_Host,&HID_cb,&USR_Callbacks);

//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE);//使能USB OTG时钟      FS改成HS      
  //GPIOB14,B15设置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;//PB14、15复用功能输出       
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
       
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
       
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//PB13推挽输出               
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出功能
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
       
  USB_HOST_PWRCTRL=1;                        //开启USB HOST电源供电

        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG_HS_FS);//PB14,AF12(USB) //GPIO_AF_OTG_FS改成GPIO_AF_OTG_HS_FS
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG_HS_FS);//PB15,AF12(USB) //GPIO_AF_OTG_FS改成GPIO_AF_OTG_HS_FS
}
//USB OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
        NVIC_InitTypeDef   NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn;                                            //FS改成HS
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;//子优先级3
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
  NVIC_Init(&NVIC_InitStructure);//配置  
}


最佳答案

查看完整内容[请看2#楼]

可以通过 STM32CubeMX自动生成两个工程:一个是OTG_FS,一个是OTG_HS_FS,一比较就出来了,主要除了那些,是这个地方的配置,见下图 还有就是USBH_Init(&hUsbHostHS, USBH_UserProcess, HOST_HS); 我是使用的3.2.2的 库,老版本的库 你也按照这个方法比较下 初始化函数就知道了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-10-27
在线时间
7 小时
发表于 2017-2-23 22:36:55 | 显示全部楼层
本帖最后由 zjsxfkf 于 2017-11-6 23:33 编辑

可以通过 STM32CubeMX自动生成两个工程:一个是OTG_FS,一个是OTG_HS_FS,一比较就出来了,主要除了那些,是这个地方的配置,见下图
还有就是USBH_Init(&hUsbHostHS, USBH_UserProcess, HOST_HS);
我是使用的3.2.2的 库,老版本的库 你也按照这个方法比较下 初始化函数就知道了
无标题.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 06:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表