十、RS485通讯实验
10.1 实验简介
10.1.1 实验需求
1:RS485 需要使用跳线帽将TX1,RX1分别 与485芯片的RX,TX相连接.如下图红色小框。
2:需要使用一个RS485转TTL的转换器。如下图红色大框。
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 硬件设计
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切换相应状态。