我使用虚拟 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 识别并传输数据?