|
程序很簡(jiǎn)單,就兩個(gè)串口中斷接收,DMA發(fā)送。串口3直接TTL轉(zhuǎn)USB時(shí)。數(shù)據(jù)收發(fā)沒問題。當(dāng)用USB轉(zhuǎn)485時(shí),單片機(jī)接收數(shù)據(jù)就容易丟數(shù)據(jù),一串?dāng)?shù)據(jù)前邊應(yīng)該是4個(gè)字節(jié),收到卻是三個(gè)錯(cuò)誤的字節(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ù)偶爾時(shí)錯(cuò)誤的。 |
|