NevermindZZT / letter-shell

letter shell
MIT License
1.2k stars 438 forks source link

STM32使用虚拟串口的问题 #189

Closed SkylerLiang closed 4 weeks ago

SkylerLiang commented 4 months ago

使用的单片机为STM32F103RCT6,用CubeMX生成工程,在使用UART发送以及UART中断接收时,可以正常使用,代码如下:

short userShellWrite(char *data, unsigned short len)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)data, len, 0xFF);
    return len;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == huart1.Instance)
    {
        shellHandler(&shell, uartRxBuf);
    }
    HAL_UART_Receive_IT(&huart1, &uartRxBuf, 1);
}

但使用CubeMX生成的USB虚拟串口时,出现了错误,代码如下:

short userShellWrite(char *data, unsigned short len)
{
    if (0 != CDC_Transmit_FS((uint8_t *)data, (uint16_t)len))
    {
        return 0;
    }
    return (short)len;
}
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
    for (int i = 0; i < (*Len); i++)
    {
        shellHandler(&shell, (char)Buf[i]);
    }
  USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

显示如下: image 不显示用户名等内容 请问可能是什么导致的

NevermindZZT commented 4 months ago

看着是没啥问题,不过我没有试过虚拟串口,会不会有什么缓冲区之类的设置

MengHuanzzz commented 2 months ago

没用ST的驱动,你尝试一下cherryUSB,它比st的屎山好的多

DragonYH commented 1 month ago

同问题,现在解决了吗

SkylerLiang commented 1 month ago

同问题,现在解决了吗

还没有,后面没有研究这个问题了

DragonYH commented 4 weeks ago

搞定了,是官方库的传输函数连续使用会有问题 QQ20240819-132133 QQ20240819-132229 QQ20240819-132243 QQ20240819-132434

把rxFlag和rxBuf声明为全局变量即可

SkylerLiang commented 4 weeks ago

明白了,多谢