1.0
This commit is contained in:
@@ -69,10 +69,20 @@ void SystemClock_Config(void);
|
|||||||
extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄
|
extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄
|
||||||
|
|
||||||
int _write(int file, char *ptr, int len) {
|
int _write(int file, char *ptr, int len) {
|
||||||
for (int i = 0; i < len; i++) {
|
// 1. 致命拦截:如果电脑压根没连上 USB,直接丢弃数据,坚决不死等!
|
||||||
HAL_UART_Transmit(&huart4, (uint8_t*)&ptr[i], 1, 1000);
|
if (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) {
|
||||||
HAL_Delay(1); // 每个字符间隔 1ms
|
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;
|
return len;
|
||||||
}
|
}
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|||||||
Reference in New Issue
Block a user