你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32u5 usb调试痛点求解救

[复制链接]
MrQuirky 提问时间:2023-9-20 19:17 / 未解决

平台:STM32U575qii-EV板

模块:USBX,ThreadX

目的:stm32u575芯片作为usb device和PC实现双向通信,device为HID Custom类

现状:当前代码基础配置已经完成,可以枚举成功,并且能够通过usbx的api实现数据发送,或者通过HAL_PCD_EP_Transimit()接口实现数据发送。但是如果发送时间间隔超过5s钟,MCU usb直接suspend,发送接口无法实现功能,并且找不到可以恢复的方法。尝试顺着中断去找suspend的函数或者执行代码,没能找到。请教各位大佬,有没有这方面的经验分享一下?

收藏 评论4 发布时间:2023-9-20 19:17

举报

4个回答
xmshao 回答时间:2023-9-21 10:06:38
如果你发现USB进入了挂起状态,希望开启通信前 可以尝试 重新开启 即Resume.


之前 ST提供的USB库里是有类似函数的,比方 USBD_LL_Resume();


你现在使用USBX,可以试试使用ux_device_stack_host_wakeup()之类的函数。
MrQuirky 回答时间:2023-9-21 11:50:36
xmshao 发表于 2023-9-21 10:06
如果你发现USB进入了挂起状态,希望开启通信前 可以尝试 重新开启 即Resume.


非常感谢大佬的回复和指点

我这边尝试了ux_device_stack_host_wakeup()函数去唤醒USB,失败了

我查看stm32的pcd hal库,有个函数

HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd)
{
return (USB_ActivateRemoteWakeup(hpcd->Instance));
}

调用这个函数,device会一直上报一个0x04的数据,但是数据发送函数还是无法正常使用

不知道这个和用户自定义的descriptor有没有关系,用同样的工程,把描述符换成Mouse的标准描述符就不会出现休眠,用如下的描述符就会休眠:

uint8_t USBD_CustomHID_ReportDesc[] =
{

0x05, 0xFF, // USAGE_PAGE(User define)
0x09, 0xFF, // USAGE(User define)
0xa1, 0x01, // COLLECTION (Application)

// The Input report
0x05, 0x01, // USAGE_PAGE(1)
0x19, 0x00, // USAGE_MINIMUM(0)
0x29, 0xFF, // USAGE_MAXIMUM(255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x40, // REPORT_COUNT (64)
0x81, 0x02, // INPUT (Data,Var,Abs)

// The Output report
0x05, 0x02, // USAGE_PAGE(2)
0x19, 0x00, // USAGE_MINIMUM (0)
0x29, 0xFF, // USAGE_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0xFF, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x20, // REPORT_COUNT (32)
0x91, 0x02, // OUTPUT (Data,Var,Abs)

0xc0                          /* End Collection                       */
};
xmshao 回答时间:2023-9-21 16:01:38
哦,那个函数主要是用来唤醒主机的,你用用这个试试 ux_device_stack_resume()。
MrQuirky 回答时间:2023-9-21 17:12:57
xmshao 发表于 2023-9-21 16:01
哦,那个函数主要是用来唤醒主机的,你用用这个试试 ux_device_stack_resume()。

找了一下这个函数,在库里没有找见呀,然后去Microsoft官网上查了一下,也没有找到这个接口。
当控制器更改了其状态时,应用程序可以请求回调。 控制器的两种主要状态为:
  • UX_DEVICE_SUSPENDED
  • UX_DEVICE_RESUMED
如果应用程序不需要暂停/继续信号,则会提供 UX_NULL 函数。

倒是从ux_device_stack的相关介绍里找到这样一段话,不过这段插在了ux_device_stack_initialize()函数的介绍里。
然后在库里有一个ux_device_stack_connect接口,但是没有函数声明,没办法使用。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版