2019-07-14 18:23发布
ctwewer 发表于 2018-8-24 07:48 RS485通讯进程由主机调度,主机必须等某台从机完全发送完数据后才能请求另一台丛机发送数据。你应该在每台从机发送完数据后给主机一个结束标志应答信号,主机接收到应答信号后才能请求另外从机发送。
旧巷幽草香 发表于 2018-8-24 08:07 您好,感谢您的回复 如我文中提到,我将每台从机设计成了接收数据后返回应答指令“AAAA”,主机收到这个后才会对第二个从机进行操作。
ctwewer 发表于 2018-8-24 07:39 那个AAAA应该是从机给主机的应答,我不明白“第二台从机收到“AAAA”后好像发生了异常。”是怎么回事? 你应该每次发送完就清空从机的接收缓冲区,以免把上次的信息当成本次的信息
宝弟弟弟 发表于 2018-8-24 08:15 你的电路是怎么接的,UART的串口发送输出引脚是输出模式,是不是发送端口的冲突了!
最多设置5个标签!
您好,感谢您的回复
如我文中提到,我将每台从机设计成了接收数据后返回应答指令“AAAA”,主机收到这个后才会对第二个从机进行操作。
但是现在的问题是,第二台从机收到“AAAA”后好像发生了异常。看上去似乎是将“AAAA”收进了缓冲区,在正常命令到来时,和“AAAA”拼在了一起处理。
上面只是我的猜测,请您根据我的代码帮忙看看有没有可能是这样的。 谢谢
如果你将PC和两个单片机连到一条总线上,那么单片机A发的“AAA”是能够被单片机B收到的。在这种情况下,单片机的程序是需要做些处理,来判断它所收到的“AAA”是另一个单片机发的,还是PC发的。如果处理不了这个,通信是无法正常进行的。
首先,感谢您的回复
对对!就是这个!我也觉得问题出在我没清从机,但我刚接触不知道怎么清,能赐教么?谢谢
我使用DMA接收,虽然中断里我关了DMA,但好像还是会从UART缓存进来垃圾,从而被当做第二次的数据。
请问我是不是该在中断里也关闭UART呢?还是只要清UART缓存就行了,请问函数是什么呢?
我的电路是每个STM32模块外都串了RS485模块,是自动流控制的。用示波器量出错的单片机的UART端,数据都对,感觉就像有人说的,我没清缓存?
一周热门 更多>