[APM32F4] M4的485通信使用技巧及注意事项

[复制链接]
3176|25
 楼主| lengrudie 发表于 2024-2-24 16:47 | 显示全部楼层 |阅读模式
本帖最后由 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.png
2.png
3.png

二、软硬件匹配
1、下图是485的电路图纸,由于控制板上的串口引脚是通过普通光耦隔离再与485模块连接,为了避开光耦速度的干扰,因此测试时传输的速率设为9600bps。
2、终端电阻的确定,其中一块板带终端电阻120R,另外一块板不接终端电阻。
      4.png
三、软件调试
       控制板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、在收发切换时,必须加上延时才能正常接收到完整的数据。
5.png

以上说明: 同样是485通信,在应用场合不一样,硬件上会选择性的使用光耦隔离,在程序上的延时可能也不一样,能与电脑串口通信只能说明在理想情况下能正常工作,485是比较成熟的应用,出现问题大概率是程序上的逻辑时序原因。另外要注意的是,485通信是半双工,主从收发过程中要注意总线的使用。









zhao133 发表于 2024-2-27 13:43 | 显示全部楼层
感谢楼主分享
albertaabbot 发表于 2024-3-1 20:06 | 显示全部楼层
RS485是一种常见的串行通信标准,它支持在同一总线上进行多节点通信,并且能够在较远的距离上实现高噪声环境下的可靠通信。
janewood 发表于 2024-3-1 20:24 | 显示全部楼层
M4系列单片机支持串行通信协议,包括标准的UART、SPI、I2C以及RS485等。
deliahouse887 发表于 2024-3-2 00:54 | 显示全部楼层
在进行多节点通信时,确保每个节点的地址唯一,以避免数据传输错误。
sdlls 发表于 2024-3-2 10:19 | 显示全部楼层
在这个过程中,你可能会遇到接收乱码的问题。这通常是由于没有正确设置485通信的参数,比如波特率、数据位、停止位和校验位等。确保这些参数的设置与你的通信协议相匹配是非常重要的。
51xlf 发表于 2024-3-2 16:43 | 显示全部楼层
a. 选择合适的485芯片,如MAX485、SN75176等,根据实际需求选择。

b. 正确配置485芯片的引脚,如使能引脚、发送/接收引脚等。

c. 为485通信提供适当的电源和地。

d. 确保485通信线缆的质量,使用双绞线屏蔽电缆,以减少干扰。
jkl21 发表于 2024-3-2 18:39 | 显示全部楼层
对于RS485通信,还需要连接DE(数据 enable)和RE(接收 enable)引脚,以控制数据的发送和接收。
modesty3jonah 发表于 2024-3-2 22:44 | 显示全部楼层
由于485芯片默认是高阻态,所以在不使用的时候,你需要将其置于休眠状态以节省功耗。而在使用时,则需确保485芯片处于正常工作状态。
jonas222 发表于 2024-3-3 09:46 | 显示全部楼层
在通信过程中,确保数据的完整性和正确性,如使用奇偶校验、循环冗余校验(CRC)等。
mickit 发表于 2024-3-3 11:42 | 显示全部楼层
在RS-485总线的两端需要各接一个120欧姆的终端电阻,以消除信号反射,提高通信稳定性。
wangdezhi 发表于 2024-3-3 13:43 | 显示全部楼层
使用专门的RS485收发器芯片 与  M4单片机相连,而不是直接使用单片机的USART端口进行RS485通信。
updownq 发表于 2024-3-3 15:34 | 显示全部楼层
可能需要考虑主从模式或者轮询机制来协调各个设备之间的通信。每个设备都应该有一个唯一的地址,这样在通信时才能准确地识别和响应。
cemaj 发表于 2024-3-3 17:26 | 显示全部楼层
在多个节点同时发送时,使用冲突检测和解决策略。
实现错误检测,如校验错误,并对其进行适当的处理。
10299823 发表于 2024-3-3 19:23 | 显示全部楼层
还有一点需要注意的是,485芯片的A、B引脚电平状态。在发送数据时,A引脚的电平应该高于B引脚;而在接收数据时,如果接收到的数据是“1”,那么A引脚的电平应该低于B引脚。
mollylawrence 发表于 2024-3-3 21:58 | 显示全部楼层
驱动电路通常连接到单片机的TX(发送)引脚,接收电路连接到单片机的RX(接收)引脚。
timfordlare 发表于 2024-3-4 11:09 | 显示全部楼层
为了提高系统的抗干扰能力和稳定性,建议在RS-485通信线路上加入电气隔离措施,如使用光耦或磁耦隔离器。
febgxu 发表于 2024-3-4 15:39 | 显示全部楼层
RS485总线应该采用屏蔽双绞线作为通讯线,这样可以有效地减少电磁干扰,提高通信的可靠性。同时,你需要注意485芯片的A、B两个引脚不能短路,也不能与地或其他任何线路短路。
belindagraham 发表于 2024-3-5 09:33 | 显示全部楼层
为了实现RS-485通信,你需要一个RS-485收发器芯片,如MAX485、SP3485等。这些芯片可以将TTL电平转换为RS-485电平,并具备一定的抗干扰能力。
sesefadou 发表于 2024-3-5 11:34 | 显示全部楼层
由于M4单片机的IO口通常是TTL电平(0-3.3V或0-5V),而RS-485使用差分信号,因此需要一个电平转换电路或芯片来将TTL电平转换为RS-485电平。常用的芯片有MAX485、SP3485等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

63

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部