本帖最后由 会飞的猪_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。
|