硬汉嵌入式论坛

 找回密码
 立即注册
查看: 478|回复: 8
收起左侧

[USB] STM32H723 USB只有优化为-O0才工作

[复制链接]

2

主题

7

回帖

13

积分

新手上路

积分
13
发表于 2024-4-12 20:07:11 | 显示全部楼层 |阅读模式
平台和应用:STM32H723 USB、VCP虚拟串口
代码生成和编译器:使用cubeMX生成makefile,使用gcc编译
细节:只有makefile改优化选项-O0   USB才工作,默认的-Og以及-O3 2 1都不能成功识别USB COM口



-Og 优化时,编译,运行都没报错,就是设备管理器没有显示 串行设备(COMx)。程序运行过程中,设备管理器会重新刷新(但是没有任何新设备出现)没有黄色感叹号,没有“未知USB设备”单纯就是没有显示。

只有-O0编译之后一切正常。

还有-Og优化时,程序初始化过程在USB中断打断点然后手动一直下一步。会出现COM口,但是还带有黄色感叹号。

请问有什么调试思路吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2024-4-13 08:51:58 | 显示全部楼层
可以通过局部优化锁定问题,不过我这里的GCC是用的Embedded Studio做的。

实战技能分享,如何让工程代码各种优化等级通吃,含MDK AC5,AC6,IAR和GCC
https://www.armbbs.cn/forum.php?mod=viewthread&tid=109749
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2024-4-13 10:26:18 | 显示全部楼层
eric2013 发表于 2024-4-13 08:51
可以通过局部优化锁定问题,不过我这里的GCC是用的Embedded Studio做的。

实战技能分享,如何让工程代码 ...

十分感谢,我尝试一下,有结果回贴
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2024-4-15 10:07:06 | 显示全部楼层
感谢提供的思路,定位到这段代码:
#pragma GCC push_options
#pragma GCC optimize ("O0")
static void Get_SerialNum(void)
{
  uint32_t deviceserial0;
  uint32_t deviceserial1;
  uint32_t deviceserial2;

  deviceserial0 += deviceserial2;

  if (deviceserial0 != 0)
  {
    IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
    IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
  }
}
#pragma GCC pop_options
这个函数不优化就可以了。
开发人员应该是想利用未初始化的变量来生成随机序列号?
然后这种操作会被编译器优化掉就生成不了了。我查到st官方论坛有人建议将这个函数变为用户自定义函数就可以方便使用用户指定的UID作为序列号
在这里:https://community.st.com/t5/stm3 ... the-get/td-p/376504
https://community.st.com/t5/stm3 ... -number/td-p/618338
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2024-4-15 22:42:20 | 显示全部楼层
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2024-4-17 12:07:12 | 显示全部楼层
现在windows识别没有问题,通信也没有问题。变成了mac和ubuntu不识别,插进去一点反应都没有。开发板却没问题,我看原理图没有区别,因为用的typec,cc1,cc2 5k1接地,因为h7内置阻抗匹配 我的板和开发板都没有22R(焊上过也不行)或者33R直接连到typec但是就是同样的代码开发板可以我的板不行(linux系统不识别)
回复

使用道具 举报

2

主题

7

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2024-4-17 13:54:31 | 显示全部楼层
lub 发表于 2024-4-17 12:07
现在windows识别没有问题,通信也没有问题。变成了mac和ubuntu不识别,插进去一点反应都没有。开发板却没问 ...

解决了,示波器检查发现DM引脚没有正确下拉,仔细看发现DM引脚跟旁边引脚短接了导致有弱上拉。应该是windows的检测没那么严格,导致除了windows系统(MAC和Linux)都不识别,比较具有迷惑性
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2024-4-18 08:46:05 | 显示全部楼层
lub 发表于 2024-4-17 13:54
解决了,示波器检查发现DM引脚没有正确下拉,仔细看发现DM引脚跟旁边引脚短接了导致有弱上拉。应该是wind ...

谢谢告知最终问题原因。
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2024-4-18 09:01:23 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 17:50 , Processed in 0.252602 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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