跳到主要内容

十、RS485通讯实验

10.1 实验简介

10.1.1 实验需求

1:RS485 需要使用跳线帽将TX1,RX1分别与485芯片的RX,TX相连接.如下图红色小框。

2:需要使用一个RS485转TTL的转换器。如下图红色大框。

rs485

10.1.2 485简介

RS485 的特点包括:

1, 接口电平低,不易损坏芯片。RS485 的电气特性:逻辑“1”以两线间的电压差为+(2~6)V

表示;逻辑“0”以两线间的电压差为-(2~6)V 表示。接口信号电平比 RS232 降低了,不

易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。

2, 传输速率高。

3, 抗干扰能力强。

4,传输距离远,支持节点多。

由于 RS485 具有传输距离远、传输速度快、支持节点多和抗干扰能力更强等特点,所以

RS485 有很广泛的应用。

其通信本质任然是串口,只是加了485芯片增加了以上特性!

10.2 硬件设计

485

10.3 软件设计

--初始化Max485 RE DE 控制
LIB_GpioOutputConfig("D2","STANDARD")
--初始化LED1
LIB_GpioOutputConfig("D8","STANDARD")
function SendEn()
LIB_GpioWrite("D2",1)
end
--使能MAX485接收
function RecvEn()
LIB_GpioWrite("D2",0)
end
--配置Uart1串口波特率为115200
LIB_Uart1Config("BAUDRATE_115200")
--使能10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
cnt_10ms = 0
--定义10毫秒定时器的中断函数
function LIB_10msTimerCallback()
cnt_10ms = cnt_10ms + 1
end

while(GC(1) == true)
do
--每1秒发送5字节数据给从机
if cnt_10ms >= 100 then --1000ms
cnt_10ms = 0
send_data = {1,2,3,4,5}
SendEn()
LIB_Uart1BlockSend(send_data)
RecvEn()
end
--查询是否收到从机发来的5字节数据,并验证
recv_flag,recv_data = LIB_Uart1Recv()
if recv_flag == 1 and #recv_data == 5 then
if recv_data[1] == 6 and recv_data[2] == 7 and recv_data[3] == 8 and recv_data[4] == 9 and recv_data[5] == 10 then
LIB_GpioToggle("D8") --切换LED状态
end
end
end

10.4 实验现象

注意波特率一定要与所写程序波特率相对应。

串口每隔1S就会接收到相应的信息,发送6 7 8 9 10后,(注意相应的软件配置细节,如下图)板上的LED1切换相应状态。

RS485

RS485_2