公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

请一个教会问题:我在使用口通信时,配置模式是先入为快,然后配置接收字节是 12 个字节,正常通信 CESTFACTED 字节数是 12 个,通信正常。但是当通信过程有异常时,字节数会多于 12 个或小于 12 个,这时会导航口无法接收数据,然后当字节数恢复为 12 个字节时,单片机也是接收不到数据。texpilexial是pouctcad siveliced dieadewithaish,无法恢复,请问有什么办法可以解决这个问题吗?

wang1_0-1699955062942.png

 

wang1_1-1699955076769.png

	UART_DriverInit(1,0,0,2400,8,0,1);
	/*void UART_FifoInit(rxFifoSize, txFifoSize) */ 
	UART_FifoInit(12, 12);


if((i&0X01)==0)//如果不为空,即有数据在接收
	{
		RecvTimeCnt = RecvTimeCnt+1;
		if(RecvTimeCnt>1)
		{
			RecvTimeCnt = 0;
			if((i&0x02)==0x02)//如果数据接收满
			{
				 
				 RTxbuff0=UART_RxFifo();
			    RTxbuff1=UART_RxFifo();
			    RTxbuff2=UART_RxFifo();
			    RTxbuff3=UART_RxFifo();
			    RTxbuff4=UART_RxFifo();
			    RTxbuff5=UART_RxFifo();
			    RTxbuff6=UART_RxFifo();
			    RTxbuff7=UART_RxFifo();
			    RTxbuff8=UART_RxFifo();
			    RTxbuff9=UART_RxFifo();
			    RTxbuff10=UART_RxFifo();
			    RTxbuff11=UART_RxFifo();
			}
			
			if((RTxbuff0==0x5A)&&(RTxbuff9==0x3C))
			{
				ReciveCnt = 0;

				crc_16 = 0xff;
				for(j=0:9)
				{
					if(j==0){crc_16=crc_16 ^RTxbuff0;}
					if(j==1){crc_16=crc_16 ^RTxbuff1;}
					if(j==2){crc_16=crc_16 ^RTxbuff2;}
					if(j==3){crc_16=crc_16 ^RTxbuff3;}
					if(j==4){crc_16=crc_16 ^RTxbuff4;}
					if(j==5){crc_16=crc_16 ^RTxbuff5;}
					if(j==6){crc_16=crc_16 ^RTxbuff6;}	
					if(j==7){crc_16=crc_16 ^RTxbuff7;}
					if(j==8){crc_16=crc_16 ^RTxbuff8;}
					if(j==9){crc_16=crc_16 ^RTxbuff9;}
				}		
				//FlagGet = UART_GetStatus();
				UART_TxFifo(0xFF);  //crc1_16 = 5cf4
				UART_TxFifo(crc_16/256);  //crc1_16 = 5cf4
				UART_TxFifo(crc_16%256);
				//UART_Control(0xFFFFFFFF);//Clear RX FIFO bit 			
			}
			else
			{	
				RTxbuff0=0;
			    RTxbuff1=0;
			    RTxbuff2=0;
			    RTxbuff3=0;
			    RTxbuff4=0;
			    RTxbuff5=0;
			    RTxbuff6=0;
			    RTxbuff7=0;
			    RTxbuff8=0;
			    RTxbuff9=0;
			    RTxbuff10=0;
			    RTxbuff11=0;	
				UART_Control(0x02);//Clear RX FIFO bit 		
			}
		UART_Control(0x02);//Clear RX FIFO bit 			
		}
	}

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/Motor-Control-ICs/IMC101T-038-%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E6%97%A0%E6%B3%95%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%E9%97%AE%E9%A2%98/td-p/640497

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

该是fifodata的问题。

biascurtent firtonation 12 字节接收,然后收到 14 字节,前面的 12 字节可以选择操作,然后读取完整 fifofoht,清除 fifo之后的数据,可能还能收到 14 字节数据,这个数据会保存 fifo中,然后调整一个就乱了。可以添加读时间,然后在读完之后的 n ms 再清除 fifo。

如果收到了少于 12 字节,那么在下一次接收后响应 fifomuzaum,然后也乱了。但是同样可以在响应 fifomacestencear 后面的 mspreclear fifo 中,这样可以保证在每次接收前收到 fifo是空的。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/IMC101T-038-%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E6%97%A0%E6%B3%95%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%E9%97%AE%E9%A2%98/m-p/642159

在原帖中查看解决方案

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

好好,

可能的是你的程序逻辑存放在问题中,应该是在现状中断了 fifomasmabethen之后,读取数据,并处理数据。

if((i&0x02)==0x02)//如果数据接收满
{
    RTxbuff... =UART_RxFifo(); //读数据
    if((RTxbuff0==0x5A)&&(RTxbuff9==0x3C))  {}
    else {}
}

否则可能存在,UART还未收到收到,但是被等待 {} 将不在话下。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

还有一点,在 isdenscriptdefaultexecteneporepexiteConepexiturepexiture 中,task0exectenepropexite50*1ms = 50 ms;task1每周 pexecution 10 个设置。有了保全能量选择以及时接收,你就可以执行周期设置低一点,或者将步进设置大一点。

LinGuohui_0-1700027443318.png

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

按你说的我试了一下,但是现在有个问题了。就是当我的 fifoteveacevidegendefictept

UART_FifoInit(12, 12);

我确定为接收 12 个字节,当时有数据传导会遇到干扰时会超过 12 个字节或者少于 12 个字节,时会导航这个口不能正常接收数据,当数据传送输出的字节恢复为 12 个字节后,也是无法正常的通信。请问这个是怎么回事呢?需要怎么解决?谢谢!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

该是fifodata的问题。

biascurtent firtonation 12 字节接收,然后收到 14 字节,前面的 12 字节可以选择操作,然后读取完整 fifofoht,清除 fifo之后的数据,可能还能收到 14 字节数据,这个数据会保存 fifo中,然后调整一个就乱了。可以添加读时间,然后在读完之后的 n ms 再清除 fifo。

如果收到了少于 12 字节,那么在下一次接收后响应 fifomuzaum,然后也乱了。但是同样可以在响应 fifomacestencear 后面的 mspreclear fifo 中,这样可以保证在每次接收前收到 fifo是空的。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/MOTIX-MCU/IMC101T-038-%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1%E6%97%A0%E6%B3%95%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%E9%97%AE%E9%A2%98/m-p/642159

0 点赞