1

我使用虚拟 com 端口在微控制器和计算机之间进行通信。
我有MK。stm32h743由自己的3.3V电源自供电。在立方体的帮助下,我提出了一个虚拟 com 端口。您如何理解 USB 已与设备断开连接?
当你连接Usb时,它调用“CDC_Init_FS”并且hUsbDeviceFS.dev_state设置为3,对应于“USBD_STATE_CONFIGURED”。
但是当您断开 USB 时,没有回调“HAL_PCD_DisconnectCallback (PCD_HandleTypeDef * hpcd);”

为什么“HAL_PCD_DisconnectCallback (PCD_HandleTypeDef * hpcd);” 禁用USB时不调用?

我无法跟踪 Vbus 电压。所以我这样做了:

void HAL_PCD_SuspendCallback(PCD_HandleTypeDef hpcd) 
{
USBD_LL_Suspend((USBD_HandleTypeDef)hpcd->pData);
__HAL_PCD_GATE_PHYCLOCK(hpcd); 
if (hpcd->Init.low_power_enable) 
{ 
   SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | 
   SCB_SCR_SLEEPONEXIT_Msk)); 
} 
SBD_LL_DevDisconnected(&hUsbDeviceFS); 
}

你好。

我遇到了 USB 正常工作的问题 - 断开 USB 电缆并再次连接后,带有 CubeMX HAL 的 USB CDC(虚拟 Com 端口)。

对于测试,我使用 STM32CubeIDE 和 STM32CubeMX创建了一个类似于此处介绍的项目 - https://www.youtube.com/watch?v=AYICE0gU-Sg 。

程序上传到STM32后,将while(1)循环中的数据写入USB口。

    while(1)
{
 CDC_Transmit_FS(buffer, sizeof(buffer));
 HAL_Delay(1000);
}

数据被写出,在 Windows 7 (Tera Term) 中可见。

当我断开 USB 电缆(OTG FS 端口)并重新连接时,Windows 会发送消息“USB 设备无法识别”。

没有接收到数据。

为了传输数据和识别电缆,我必须在板上进行重置。

硬件:

单片机:STM32H743VIT

软件:STM32CubeIDE v1.2

固件包:STM32Cube_FW_H7_V1.7.0

如何使 USB 设备始终正常工作(断开电缆并重新连接后),以便被 Windows 识别并传输数据?

4

0 回答 0