打印
[APM32F4]

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

[复制链接]
1736|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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通信是半双工,主从收发过程中要注意总线的使用。









使用特权

评论回复
沙发
zhao133| | 2024-2-27 13:43 | 只看该作者
感谢楼主分享

使用特权

评论回复
板凳
albertaabbot| | 2024-3-1 20:06 | 只看该作者
RS485是一种常见的串行通信标准,它支持在同一总线上进行多节点通信,并且能够在较远的距离上实现高噪声环境下的可靠通信。

使用特权

评论回复
地板
janewood| | 2024-3-1 20:24 | 只看该作者
M4系列单片机支持串行通信协议,包括标准的UART、SPI、I2C以及RS485等。

使用特权

评论回复
5
deliahouse887| | 2024-3-2 00:54 | 只看该作者
在进行多节点通信时,确保每个节点的地址唯一,以避免数据传输错误。

使用特权

评论回复
6
sdlls| | 2024-3-2 10:19 | 只看该作者
在这个过程中,你可能会遇到接收乱码的问题。这通常是由于没有正确设置485通信的参数,比如波特率、数据位、停止位和校验位等。确保这些参数的设置与你的通信协议相匹配是非常重要的。

使用特权

评论回复
7
51xlf| | 2024-3-2 16:43 | 只看该作者
a. 选择合适的485芯片,如MAX485、SN75176等,根据实际需求选择。

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

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

d. 确保485通信线缆的质量,使用双绞线屏蔽电缆,以减少干扰。

使用特权

评论回复
8
jkl21| | 2024-3-2 18:39 | 只看该作者
对于RS485通信,还需要连接DE(数据 enable)和RE(接收 enable)引脚,以控制数据的发送和接收。

使用特权

评论回复
9
modesty3jonah| | 2024-3-2 22:44 | 只看该作者
由于485芯片默认是高阻态,所以在不使用的时候,你需要将其置于休眠状态以节省功耗。而在使用时,则需确保485芯片处于正常工作状态。

使用特权

评论回复
10
jonas222| | 2024-3-3 09:46 | 只看该作者
在通信过程中,确保数据的完整性和正确性,如使用奇偶校验、循环冗余校验(CRC)等。

使用特权

评论回复
11
mickit| | 2024-3-3 11:42 | 只看该作者
在RS-485总线的两端需要各接一个120欧姆的终端电阻,以消除信号反射,提高通信稳定性。

使用特权

评论回复
12
wangdezhi| | 2024-3-3 13:43 | 只看该作者
使用专门的RS485收发器芯片 与  M4单片机相连,而不是直接使用单片机的USART端口进行RS485通信。

使用特权

评论回复
13
updownq| | 2024-3-3 15:34 | 只看该作者
可能需要考虑主从模式或者轮询机制来协调各个设备之间的通信。每个设备都应该有一个唯一的地址,这样在通信时才能准确地识别和响应。

使用特权

评论回复
14
cemaj| | 2024-3-3 17:26 | 只看该作者
在多个节点同时发送时,使用冲突检测和解决策略。
实现错误检测,如校验错误,并对其进行适当的处理。

使用特权

评论回复
15
10299823| | 2024-3-3 19:23 | 只看该作者
还有一点需要注意的是,485芯片的A、B引脚电平状态。在发送数据时,A引脚的电平应该高于B引脚;而在接收数据时,如果接收到的数据是“1”,那么A引脚的电平应该低于B引脚。

使用特权

评论回复
16
mollylawrence| | 2024-3-3 21:58 | 只看该作者
驱动电路通常连接到单片机的TX(发送)引脚,接收电路连接到单片机的RX(接收)引脚。

使用特权

评论回复
17
timfordlare| | 2024-3-4 11:09 | 只看该作者
为了提高系统的抗干扰能力和稳定性,建议在RS-485通信线路上加入电气隔离措施,如使用光耦或磁耦隔离器。

使用特权

评论回复
18
febgxu| | 2024-3-4 15:39 | 只看该作者
RS485总线应该采用屏蔽双绞线作为通讯线,这样可以有效地减少电磁干扰,提高通信的可靠性。同时,你需要注意485芯片的A、B两个引脚不能短路,也不能与地或其他任何线路短路。

使用特权

评论回复
19
belindagraham| | 2024-3-5 09:33 | 只看该作者
为了实现RS-485通信,你需要一个RS-485收发器芯片,如MAX485、SP3485等。这些芯片可以将TTL电平转换为RS-485电平,并具备一定的抗干扰能力。

使用特权

评论回复
20
sesefadou| | 2024-3-5 11:34 | 只看该作者
由于M4单片机的IO口通常是TTL电平(0-3.3V或0-5V),而RS-485使用差分信号,因此需要一个电平转换电路或芯片来将TTL电平转换为RS-485电平。常用的芯片有MAX485、SP3485等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

49

帖子

1

粉丝