- 打卡等级:常住居民II
- 打卡总天数:87
- 最近打卡:2025-04-27 06:53:22
高级会员
- 积分
- 611
|
本帖最后由 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 ;
}
有些芯片有这个问题,有些芯片没有,并且同一个芯片也不是每次都会收到数据,有一定的概率。
|
|