| 你要考虑的是要加等待判断,是没接收完。 |
| 顶一下 |
| 通过逻辑分析仪查看RS485转TTL,UART3收到我数据是正确的的,但是单片机接收到的是不正常的。把TTL直接接在UART3上,收到的数据就正常。是RXD设置了高阻输入,打开了上拉电阻。TXD设置为推挽输出,这样合理吗? |
|
程序很简单,就两个串口中断接收,DMA发送。串口3直接TTL转USB时。数据收发没问题。当用USB转485时,单片机接收数据就容易丢数据,一串数据前边应该是4个字节,收到却是三个错误的字节,应该从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 上边是串口接收中断,收到数据发给串口1,串口1接收到的数据偶尔时错误的。 |