620|0

504

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【ST多款开发板返场测评】STM32F767 Nucleo-144 HID设备枚举过程调试 [复制链接]

前言

前面我们准备了打印输出部分的实现,现在开始就可以基于此进行USB的调试了。

 

过程

添加USB相关代码到现有的代码上

USB相关代码,PCD的驱动

 

 

 

Stm32fxx_it.c中usb中断处理

void OTG_FS_IRQHandler(void)

{

  HAL_PCD_IRQHandler(&hpcd);

}



/**

  * [url=home.php?mod=space&uid=159083]@brief[/url]  This function handles USB Handler.

  * @param  None

  * @retval None

  */

void OTG_FS_WKUP_IRQHandler(void)

{

  if((&hpcd)->Init.low_power_enable)

  {

    /* Reset SLEEPDEEP bit of Cortex System Control Register */

    SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));

    

    SystemClockConfig_STOP();

    

    /* Ungate PHY clock */

     __HAL_PCD_UNGATE_PHYCLOCK((&hpcd));

  }

  /* Clear EXTI pending Bit*/

  __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG();

}
 

 

Inc\stm32f7xx_hal_conf.h中

定义#define HAL_PCD_MODULE_ENABLED使用PCD库代码

 

Main函数初始化

int main(void)

{

  /* Configure the MPU attributes */

  MPU_Config();



  /* Enable the CPU Cache */

  CPU_CACHE_Enable();



  /* STM32F7xx HAL library initialization:

       - Configure the Flash prefetch, instruction and Data caches

       - Configure the Systick to generate an interrupt each 1 msec

       - Set NVIC Group Priority to 4

       - Global MSP (MCU Support Package) initialization

     */

  HAL_Init();

  

  /* Configure the system clock to 216 MHz */

  SystemClock_Config();

  

  /* Init Device Library */

  USBD_Init(&USBD_Device, &HID_Desc, 0);

  

  /* Add Supported Class */

  USBD_RegisterClass(&USBD_Device, USBD_HID_CLASS);

  

  /* Start Device Process */

  USBD_Start(&USBD_Device);



bsp_uart_init();

  uint8_t tx_buffer[2]={0xAA,0x55};

static uint32_t pretick;

  /* Infinite loop */

pretick = HAL_GetTick();

debug_set_level(DEBUG_TAG_SETUP, DEBUG_LEVEL_INFO);

  while (1)

  {

uart_debug_send(16);

shell_exec_shellcmd();

  }

}

测试

Main中使能打印输出

debug_set_level(DEBUG_TAG_SETUP, DEBUG_LEVEL_INFO);

 

 

 

 

usbd_core.c中USBD_LL_SetupStage中添加如下日志输出,打印8字节的SETUP内容

do_debug(DEBUG_TAG_SETUP,DEBUG_LEVEL_INFO,"[setup]:%#x %#x %#02x %#02x %#02x\r\n",pdev->request.bmRequest,

pdev->request.bRequest,pdev->request.wValue,pdev->request.wIndex,pdev->request.wLength);

 

看到整个枚举过程打印如下

比如第一条0x80 0x06 0x100 00 0x40即获取设备描述符

第二条0 0x5 0x4 00 00即设置地址

可以清晰的看出整个枚举过程

 

总结

磨刀不误砍柴工,工欲善其事必先利其器,有了前面的准备工作,准备了好用的命令行交互和打印输出,可以方便后面USB的开发调试,提高效率。

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表