近期,在做项目的时候发现在单片机产生的低波特率(4800以下)下RS485通信第一个和第二个数据会出现识别错误的情况,然而在4800以上的波特率却不会出现这样的问题。如下图所示
串口接收的数据与逻辑分析仪出现的数据不一样,这就说明了,串口处理数据后发出来的数据没有问题,在经过rs485芯片后数据出现了问题。看RS485的数据手册后发现,在我们拉高RE或者DE引脚后应适当延时后在进行数据的传送。例如:
void RS485_SendString(char* ch ,uint8_t Length)
{
PORT_SetBit(RS485_RD_PORT,RS485_RD_PIN);
Delay_us(100); //延时485识别数据
while(Length--)
{
UART0_Send(*ch++);
}
PORT_ClrBit(RS485_RD_PORT,RS485_RD_PIN);
}
这样就能解决问题。欢迎指正。