多个STM32相连的冲突问题:为什么上次没处理的数据会影响下次

2019-07-14 18:23发布

我刚接触STM32不久,对DMA和中断的用法不是很熟,不知道为什么上次没处理的数据会影响下次,或者是我没有完全关闭DMA的接收或是没清缓存?请大牛指点我的问题所在,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
ctwewer
1楼-- · 2019-07-14 19:56
RS485通讯进程由主机调度,主机必须等某台从机完全发送完数据后才能请求另一台丛机发送数据。你应该在每台从机发送完数据后给主机一个结束标志应答信号,主机接收到应答信号后才能请求另外从机发送。
旧巷幽草香
2楼-- · 2019-07-14 21:10
ctwewer 发表于 2018-8-24 07:48
RS485通讯进程由主机调度,主机必须等某台从机完全发送完数据后才能请求另一台丛机发送数据。你应该在每台从机发送完数据后给主机一个结束标志应答信号,主机接收到应答信号后才能请求另外从机发送。

您好,感谢您的回复

如我文中提到,我将每台从机设计成了接收数据后返回应答指令“AAAA”,主机收到这个后才会对第二个从机进行操作。
但是现在的问题是,第二台从机收到“AAAA”后好像发生了异常。看上去似乎是将“AAAA”收进了缓冲区,在正常命令到来时,和“AAAA”拼在了一起处理。

上面只是我的猜测,请您根据我的代码帮忙看看有没有可能是这样的。 谢谢
宝弟弟弟
3楼-- · 2019-07-14 22:53
 精彩回答 2  元偷偷看……
keji730
4楼-- · 2019-07-14 23:52
旧巷幽草香 发表于 2018-8-24 08:07
您好,感谢您的回复

如我文中提到,我将每台从机设计成了接收数据后返回应答指令“AAAA”,主机收到这个后才会对第二个从机进行操作。

如果你将PC和两个单片机连到一条总线上,那么单片机A发的“AAA”是能够被单片机B收到的。在这种情况下,单片机的程序是需要做些处理,来判断它所收到的“AAA”是另一个单片机发的,还是PC发的。如果处理不了这个,通信是无法正常进行的。
旧巷幽草香
5楼-- · 2019-07-15 01:34
ctwewer 发表于 2018-8-24 07:39
那个AAAA应该是从机给主机的应答,我不明白“第二台从机收到“AAAA”后好像发生了异常。”是怎么回事?
你应该每次发送完就清空从机的接收缓冲区,以免把上次的信息当成本次的信息

首先,感谢您的回复

对对!就是这个!我也觉得问题出在我没清从机,但我刚接触不知道怎么清,能赐教么?谢谢

我使用DMA接收,虽然中断里我关了DMA,但好像还是会从UART缓存进来垃圾,从而被当做第二次的数据。

请问我是不是该在中断里也关闭UART呢?还是只要清UART缓存就行了,请问函数是什么呢?
旧巷幽草香
6楼-- · 2019-07-15 03:23
宝弟弟弟 发表于 2018-8-24 08:15
你的电路是怎么接的,UART的串口发送输出引脚是输出模式,是不是发送端口的冲突了!

我的电路是每个STM32模块外都串了RS485模块,是自动流控制的。用示波器量出错的单片机的UART端,数据都对,感觉就像有人说的,我没清缓存?

一周热门 更多>