| 
				打卡等级:常住居民II打卡总天数:90最近打卡:2025-08-22 06:47:52 高级会员 
 
 
	积分708 
 | 
 
| 本帖最后由 DebugLab 于 2024-9-26 09:42 编辑 
 吐槽下, AI8H8K64U上电过程中,串口接收到不明数据, 需要软件避开此时间段,具体代码如下:
 
 void UART1_int (void) interrupt 4
 {
 u8 DataTemp;
 
 if( RI )                                                        //接收数据中断被置位,接收数据
 {
 DataTemp = SBUF;
 
 if( (ReceiveUartCMDStructure.ReceivedCMDDataLength == 0) && (DataTemp == DATA_START))        //一帧数据开始
 ReceiveUartCMDStructure.StartReceiveDataTimeCountEnable = ENABLE;
 
 if( ReceiveUartCMDStructure.StartReceiveDataTimeCountEnable == ENABLE )
 ReceiveUartCMDStructure.ReceivedCMDDataBuffer[ReceiveUartCMDStructure.ReceivedCMDDataLength++] = DataTemp;
 
 ReceiveUartCMDStructure.ReceivedDataTimeCount = 0;
 RI = 0;                                                //清除串口接收中断标记
 }
 
 if( TI )                                                        //发送数据中断被置位,发送数据完成
 {
 TI = 0;                                                //清除串口发送中断完成标记
 Bit_TXD1_Busy = 0;                        //串口空闲标记置位
 }
 }
 
 
 
 避开上电期间部分代码:
 
 
 if((ReceiveUartCMDStructure.ReceivedCMDDataBuffer[DATA_START_POS] != DATA_START ) ||                                //核对数据起始和结束是否正确
 (ReceiveUartCMDStructure.ReceivedCMDDataBuffer[DATA_HEAD_SIZE + DATA_LENGTH_SIZE + DataLength] != DATA_END ))
 {
 if( PowerOnTimeDelay == ERROR )                //上电期间不发送数据
 {
 InitReceiveUartCMDStructure();
 return;
 }
 Uart_SendBytes(DataInvalidError, sizeof(DataInvalidError));                                //返回无效数据
 //Uart1_Send8Bit(0xAA);
 //Uart_SendBytes(ReceiveUartCMDStructure.ReceivedCMDDataBuffer,DataLength);
 InitReceiveUartCMDStructure();
 return ;
 }
 
 
 有些芯片有这个问题,有些芯片没有,并且同一个芯片也不是每次都会收到数据,有一定的概率。
 
 
 | 
 |