|
程序很簡單,就兩個串口中斷接收,DMA發(fā)送。串口3直接TTL轉(zhuǎn)USB時。數(shù)據(jù)收發(fā)沒問題。當(dāng)用USB轉(zhuǎn)485時,單片機(jī)接收數(shù)據(jù)就容易丟數(shù)據(jù),一串?dāng)?shù)據(jù)前邊應(yīng)該是4個字節(jié),收到卻是三個錯誤的字節(jié),應(yīng)該從RS485芯片下手吧
#ifdef UART3
void UART3_ISR_Handler (void) interrupt UART3_VECTOR
{
if(RI3)
{
CLR_RI3();
if(COM3.B_RX_OK == 0)
{
if(COM3.RX_Cnt >= COM_RX3_Lenth) COM3.RX_Cnt = 0;
if(COM3.RX_Cnt == 16) IWEDATA.ADC0++;
RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
COM3.RX_TimeOut = TimeOutSet3;
SBUF=S3BUF;
}
}
if(TI3)
{
CLR_TI3();
COM3.B_TX_busy = 0;
// if(COM3.TX_read != COM3.TX_write)
// {
// S3BUF = TX3_Buffer[COM3.TX_read];
// if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0;
// }
// else COM3.B_TX_busy = 0;
}
}
#endif
上邊是串口接收中斷,收到數(shù)據(jù)發(fā)給串口1,串口1接收到的數(shù)據(jù)偶爾時錯誤的。 |
|