有用STM32的串口转485跑Modbus协议的同志没

有用STM32的串口转485跑Modbus协议的同志没,第1张

1、起初是程序代码这提示CRC校验错误,后来发现是程序这有问题,改过之后可以完整接收仿真助手发来的Modbus帧,并进行解析,组织数据

2、在从机对发来的帧解析、组织完回复帧,进行串口发送程序时,调试助手接收不到,即一直超时错误。

后来发现是我的Max3485的使能位搞错了,(补充一下,我板子上设计了两种485的电路,一为自己搭的电路,一路为ZLG的RSM485模块,后来发现两者的使能位设置是相反的,害我捣鼓半天啊),改过之后调试助手就可以接受数据了。

初始化流程有问题吧。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE)

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)

//这个时钟不用开启

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE)

NVIC_Configuration()

GPIO_Configuration()

USART_Configuration()

问题能不能具体点?是完全没有接收数据还是接收数据是错误的?RS485通讯编程要注意TX/RX切换的时间点。如果切换时间点不合适就会导致没数据或者数据收发错误,你用的是单片机的uart来实现数据收发,这就要注意uart的发送完毕的状态标志不一定表明uart硬件已经万万完全发完电平信号,很可能数据还在uart的发送寄存器中进行某个位信号的发送,这个时候你切换了RS485芯片的TX/RX状态,那么就会导致数据发送不出去。因此由RX切换到TX状态时候要延时1ms左右(具体看硬件)再使能uart发送,当检测到uart发送完毕状态标志后也要延时几个ms(根据波特率和你设置的发送数据格式,大概计算发送8位数据+2个停止位+1个校验位所需时间),这样就可以避免数据没有发完的情况了。

广州腾霄电子的iRS-485HT隔离485收发模块,完整集成,无需额外器件,单5V供电即可实现2500V隔离和115.2kpbs的通讯速率,模块自带上下拉线电阻和TVS器件保护。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8146659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存