请教下stm32的串口,idle中断 多机通讯 能不能同时使用???标题搞长长长长长长长长长长长长长长长长长长

2019-07-21 05:41发布

本帖最后由 thinkabout4451 于 2019-1-21 09:57 编辑

需求是这样的,一主带8从,通讯的速率非常的高(使用f4单片机,6m的波特率、总线上主机几乎一直轮询),
所以如果用普通的串口中断肯定不行,因为从机就会一直不停的中断,基本也干不了别的事了。

所以现在一个比较好的想法,是idle中断+dma,然后使用stm32的多机通讯,使用地址匹配方式,
这样的话从机只需要响应和自己相关的数据,

昨天使用103的开发板+pc的串口助手简单测试下,简单测试先不加入dma:

1,单独测试多机通讯是没有问题的,地址匹配后,后面的数据都会收到,地址不匹配的话,
串口助手再发数据,stm32没反应,直到下次再收到匹配的地址。

2,单独测试idle中断也是没有问题的,连续的数码流的话,会触发一次idle中断。

3,把这两个整合起来测试就不行了,会收不到idle中断(如果这时也打开接收中断USART_IT_RXNE),那是可以响应rxne中断的。

从原理上来看,idle应该和多机通讯并不冲突才对。有没有大侠知道这个问题所在的。。下面的图是文档中的idle中断和多机通讯的说明,以及部分代码

1.png

2.png

3.png

4.png








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
thinkabout4451
1楼-- · 2019-07-22 05:14
SJL128549 发表于 2019-1-21 10:50
楼主是232通讯还是485通讯?

测试先用的232,
thinkabout4451
2楼-- · 2019-07-22 10:15
飞羽无痕 发表于 2019-1-21 11:00
Idel中断的判断条件是在一个数据周期内没有新的数据到来,然后硬件触发idel中断。所以我觉得楼主可以在Host ...

这个理解,单独测试idle也是没有问题的,我用串口助手每次其实就发送几个字节,
比如发送了5个字节,是可以收到5次rxne中断和1次idle中断,

问题是开了多机通讯后,发送5个字节,第一个是匹配的地址的话,也是可以收到
5次rxne中断的,但是没有idle中断了,

按分析,我发送完5个字节,不再发了,肯定会有idle电平的。。。。此时如果继续再
发送5个字节(不带地址的),依然可以收到5次rxne中断,因为之次的地址匹配过了,
设备处于wake状态了,除非下一次收到一个不匹配的地址会进入mute状态。

所有的分析都是通的,除了多机通讯后收不到idle
林光华ing
3楼-- · 2019-07-22 12:02
 精彩回答 2  元偷偷看……
thinkabout4451
4楼-- · 2019-07-22 16:56
林光华ing 发表于 2019-1-21 14:28
手册里不是说,idlei在静默模式能唤醒,但不会在SR寄存器置位吗。。。或许你的上位机发多了一些东西。。。

应该和发送多少无关吧,没注意到你说的不会在sr寄存器置位是啥意思,文档里有提到?
thinkabout4451
5楼-- · 2019-07-22 20:34
林光华ing 发表于 2019-1-21 14:28
手册里不是说,idlei在静默模式能唤醒,但不会在SR寄存器置位吗。。。或许你的上位机发多了一些东西。。。

你说的静默模式能唤醒,是指多机通讯的唤醒方式么?一是idle唤醒,二是地址匹配唤醒,
我现在用的是方式二,地址匹配,

而我需要的是idle中断,这个和多机通讯是两个东西,目前不能组合着用。。。
正点原子
6楼-- · 2019-07-22 22:50
帮顶

一周热门 更多>