硬汉嵌入式论坛

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

STM32物理不断开连接,使用软件断开连接的方法

[复制链接]

132

主题

689

回帖

1100

积分

至尊会员

积分
1100
QQ
发表于 6 小时前 | 显示全部楼层 |阅读模式
本帖最后由 会飞的猪_2020 于 2026-4-28 13:16 编辑

使用HAL库自带API即可实现。
D+拉低就可以识别成断开,HAL库的API HAL_PCD_DevDisconnect可以取消D+上拉,此时主机侧有下拉,所以就可以识别成断开

[C] 纯文本查看 复制代码

void USB_Reset(void)
{
    extern PCD_HandleTypeDef hpcd_USB_DRD_FS;
    HAL_Delay(200);
    HAL_PCD_DevDisconnect(&hpcd_USB_DRD_FS);
    HAL_Delay(200);
    HAL_PCD_DevConnect(&hpcd_USB_DRD_FS);
}

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USB_Device_Init();
  USB_Reset();
  while (1) {
  }
}


4月21日,发现这个问题每次烧录程序都要重新插拔一下,感觉很麻烦。
中间让AI帮我解决,烧了好多token,当时尝试了HAL_PCD_DevDisconnect,USBD_Stop都没效果,最终怀疑是上位机那边没做枚举。
遂沟通上位机开发的同事帮我联调,还是没解决问题。

由于勉强能用,,调试功能去了。

4月28日,开始调试BootLoader,因为用USB CDC做通讯线,发现这个bug影响了BootLoader。

最后发现是硬件在D+,D+那边加了上下拉的电阻。

还有一个小插曲,我让硬件帮我去掉上下拉电阻,还去错了。。导致最后又折腾了一个上午才解决此bug。





回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-28 19:18 , Processed in 0.204261 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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