|
本帖最后由 bolizhicheng204 于 2018-9-20 11:38 编辑
利用原子的XCOM进行IAP实验的时候发现,单片机发送的数据没问题,但是XCOM总是提示回复失败。后来通过串口监视,发现,单片机发送6字节的一帧数据,中间会间隔20ms左右,猜测上位机在这20ms期间认为一帧结束,从而导致完整一帧数据被截断。
后来做了以下实验:
1,通过USB转TTL直连电脑,现象依然
2,通过USB转485连接电脑,现象依然(Z-TEK的线)
3,通过USB转RS232,电路板上通过MAX3232连接,现象依然(Z-TEK的线)
4,程序里,关闭所有中断,接收到的数据不做任何处理直接按照协议回复,现象依然。
5,将发送改为DMA发送,现象依然。
问题现在锁定在STM32本身发送数组的地方,发送6个字节,中间会有时间间隔大概20ms。这个问题正常吗?如果不正常应该如何解决?
关键代码如下
前面只初始化串口,关闭串口中断,关闭其他所有中断
while(1)
{
unsigned char Rx,i;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断
{
Rx=USART_ReceiveData(USART3);//读取数据后,自动清空标志位
if(SUi.RxCount<SUi.RxSize)
{
SUi.PRxBuff[SUi.RxCount]=Rx;
SUi.RxCount++;
}
}
if(SUi.RxCount==134)
{
SUi.RxCount=0;
uctempbuff[0]=0x01;
uctempbuff[1]=0x01;
uctempbuff[2]=SUi.PRxBuff[2];
uctempbuff[3]=0 ;
ustemp=CRC16_MODBUS(uctempbuff,4);
uctempbuff[5]=(ustemp>>8)&0xff;//校验
uctempbuff[4]=ustemp&0xff;
for(i=0;i<6;i++)
{
UsartSendByte(USART3,uctempbuff);
}
}
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|