金牌会员
 
- 积分
- 1092
- 金钱
- 1092
- 注册时间
- 2019-9-3
- 在线时间
- 155 小时
|
50金钱
和上位机通信,一帧数据有256字节。在连续发送数据的时候会出现256字节分成俩段发送。
如图,蓝色的框是正常的发送。红色的是不正常的。
我试过把所有中断打开。发现不行。也试过发送每一帧数据前先延时5ms。还是会出现。
堆和栈区也改大过。一样不行。
部分代码。
#define USB_USART_TXFIFO_SIZE 1024 //USB虚拟串口发送FIFO大小
#define USB_USART_REC_LEN 1024 //USB串口接收缓冲区最大字节数
//定义一个USB USART FIFO结构体
typedef struct
{
u8 buffer[USB_USART_TXFIFO_SIZE]; //buffer
vu16 writeptr; //写指针
vu16 readptr; //读指针
}_usb_usart_fifo;
void SEND_Data(u8 Type,u8 cmd,u8 param,u8* buffer,u16 Data_len,u8 Index)
{
DataInfo temp;
temp.cType=Type;
temp.cCmd=cmd;
temp.cParam=param;
temp.usLen=Data_len;
temp.cIndex=Index;
memcpy(temp.cData,buffer,temp.usLen);
temp.BCC=BCC_Check(Data_len,buffer);
FUN_DataInfo(&temp);
}
void FUN_DataInfo(DataInfo* str)
{
u8* tp=(u8*)str;
u16 i=0;
for(i=0;i<sizeof(DataInfo);i++)
{
uu_txfifo.buffer[uu_txfifo.writeptr]=tp;
uu_txfifo.writeptr++;
if(uu_txfifo.writeptr==USB_USART_TXFIFO_SIZE)//超过buf大小了,归零.
{
uu_txfifo.writeptr=0;
}
}
}
//发送一个字节数据到USB虚拟串口
void USB_USART_SendData(u8 data)
{
uu_txfifo.buffer[uu_txfifo.writeptr]=data;
uu_txfifo.writeptr++;
if(uu_txfifo.writeptr==USB_USART_TXFIFO_SIZE)//超过buf大小了,归零.
{
uu_txfifo.writeptr=0;
}
}
|
最佳答案
查看完整内容[请看2#楼]
有一些上位机会出现这个问题。我自己调试上位机时也遇见过,会断包。 建议你先用XCOM串口助手看看会不会出现这种情况。
|