本帖最后由 lengrudie 于 2024-2-24 16:46 编辑
前段时间有个朋友使用极海的M4单片机调试485遇到一些问题,总是出现接收乱码,他找我帮忙一起调试,今天刚好有时间,借这个机会把调试485过程中遇到的一些问题和注意事项整理好,分享给大家。 现象:控制板通过USB转485模块连接电脑串口助手,可以正常收发数据;控制板1和控制板2通过485收发模块通信,发送正常,接收的数据错误。
分析排查过程:
一、资源准备
1、在极海官网下载最新的APM32F4官方例程(https://www.geehy.com/support/apm32?id=311)。
2、使用例程的串口DEMO,加上485的收发模式切换引脚控制程序,简单的测试程序就搭好了。修改好的代码如下:
二、软硬件匹配
1、下图是485的电路图纸,由于控制板上的串口引脚是通过普通光耦隔离再与485模块连接,为了避开光耦速度的干扰,因此测试时传输的速率设为9600bps。
2、终端电阻的确定,其中一块板带终端电阻120R,另外一块板不接终端电阻。
三、软件调试
控制板1用于发送(固定发送3个数据0xAA、0x55、0x33),控制板2用于接收:
1、控制板1在切换为发送模式时直接发送数据,即屏蔽RS485_DE_M_TXMODE();语句之后的延时语句 rs485_delay(1000); 结果控制板2串口接收失败。
2、控制板1在发送完3个数据后马上切换为接收模式,即屏蔽RS485_DE_M_RXMODE();语句前面的delay函数,结果控制板2只接收到前面2个数据0xAA、0x55。
3、在收发切换时,必须加上延时才能正常接收到完整的数据。
以上说明: 同样是485通信,在应用场合不一样,硬件上会选择性的使用光耦隔离,在程序上的延时可能也不一样,能与电脑串口通信只能说明在理想情况下能正常工作,485是比较成熟的应用,出现问题大概率是程序上的逻辑时序原因。另外要注意的是,485通信是半双工,主从收发过程中要注意总线的使用。
|