From c91eee77f1ea2591b53f0b1b67c36bd30af9d023 Mon Sep 17 00:00:00 2001 From: nitiantuhao <2062405236@qq.com> Date: Fri, 13 Mar 2026 22:25:12 +0800 Subject: [PATCH] 1.0 --- Core/Src/main.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 3f6fdf1..83c2d8a 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -69,10 +69,20 @@ void SystemClock_Config(void); extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄 int _write(int file, char *ptr, int len) { - for (int i = 0; i < len; i++) { - HAL_UART_Transmit(&huart4, (uint8_t*)&ptr[i], 1, 1000); - HAL_Delay(1); // 每个字符间隔 1ms + // 1. 致命拦截:如果电脑压根没连上 USB,直接丢弃数据,坚决不死等! + if (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) { + return len; } + + uint8_t result = CDC_Transmit_FS((uint8_t*)ptr, len); + uint32_t timeout = 0; + + // 2. 极短超时:就算 USB 连着但突然卡了,最多循环 5000 次就强行放弃,保命要紧 + while(result == USBD_BUSY && timeout < 5000) { + timeout++; + result = CDC_Transmit_FS((uint8_t*)ptr, len); + } + return len; } /* USER CODE END 0 */