中级会员
 
- 积分
- 226
- 金钱
- 226
- 注册时间
- 2011-8-24
- 在线时间
- 62 小时
|
10金钱
应用场景如下:USB虚拟串口到串口透传 (PC -USB虚拟串口-STM32-串口1)
问题:串口调试助手通过虚拟串口发送数据到STM32,速度过快,串口1发送缓存数据溢出(串口波特率115200)
程序代码如下:
void EP3_OUT_Callback(void)
{
u16 USB_Rx_Cnt;
USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer); //得到USB接收到的数据及其长度
EnMoreUartTX(USB_Rx_Buffer, USB_Rx_Cnt); //处理数据(其实就是保存数据)
SetEPRxValid(ENDP3); //时能端点3的数据接收
}
程序结果数据溢出
结果1-2
添加判断串口1缓存剩余空间条件保存数据后,串口调试助手死机,未响应:
void EP3_OUT_Callback(void)
{
u16 USB_Rx_Cnt;
u16 UartTX_Remain_space ;
USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer); //得到USB接收到的数据及其长度
UartTX_Remain_space =Calculate_left_UartTX(); //串口1发送缓冲取剩余空间
if(USB_Rx_Cnt<=UartTX_Remain_space) //接收数据小于等于剩余空间保存数据
{
EnMoreUartTX(USB_Rx_Buffer, USB_Rx_Cnt); //处理数据(其实就是保存数据)
SetEPRxValid(ENDP3); //时能端点3的数据接收
}
}
结果2
|
|