关于RS232传输距离和波特率的讨论
如题,我用串口调试助手接到我的板子上,将波特率设置为9600,接收到的数据正常,我的线长5muint8_tRx_dat3[]={0x5A,0xA5,0x07,0x82,0x00,0x84,0xC1,0x01,0x00,0x03};//切图
int i,n,len;
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
LED_Init(); //LED端口初始化
while(1)
{
//按键
if(KEY==0)//松开
{
LED1=1;
}
if(KEY==1)//按下按键
{
for(i=0;i<10;i++)
{
USART_SendData(UART4,Rx_dat3);
delay_ms(20);
LED1=0;
LED2=1;
LED3=0;
LED4=0;
}
delay_ms(300);
}
}
}
然后我将波特率设置为115200,接收到的数据就变异常了,代码部分只修改了波特率的设置。
uint8_t Rx_dat3[]={0x5A,0xA5,0x07,0x82,0x00,0x84,0xC1,0x01,0x00,0x03};//切图
int i,n,len;
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
LED_Init(); //LED端口初始化
while(1)
{
//按键
if(KEY==0)//松开
{
LED1=1;
}
if(KEY==1)//按下按键
{
for(i=0;i<10;i++)
{
USART_SendData(UART4,Rx_dat3);
delay_ms(20);
LED1=0;
LED2=1;
LED3=0;
LED4=0;
}
delay_ms(300);
}
}
}
网上搜了下,确实有说波特率会影响232的传输距离,但具体的一个选择关系应该如何判断,譬如多少距离应该选择对应的什么波特率,有没有一个定量的标准。
本帖最后由 LcwSwust 于 2022-4-26 09:55 编辑
这个时候,你就需要一个示波器了。原因大致是232芯片驱动能力太弱,就像引脚串联了电阻,传输线有电容,数据波形就像RC充放电。
RS232, 115200 波特率,传输100米 毫无问题。
输出距离取决于许多因素:
(1)RS232接口芯片及周边电路,特别是4个升压电容的容量与品质以及232芯片电压大小。
(2)传输线质量。如,导线铜芯直径大小,是否屏蔽,等等。
(3)波特率、CRC校验、出错重传,等容错处理;对传输误码率的要求,等等。 波特率肯定和传输距离有关系啊,因为232是电平驱动,传输距离远,损耗越严重。
页:
[1]