搜索
bottom↓
回复: 6

如何让双串口可靠的收发信息?

[复制链接]

出0入0汤圆

发表于 2016-12-7 15:50:08 | 显示全部楼层 |阅读模式
        串口0和串口1的协议都是ModBus,如果另个串口都结了主站,那么问题就出现了,两个主站会时不时的失去联系,但能恢复,或者通讯极为不缓慢,响应很不及时,总之很不理想。如果只接有一个主站,以上问题不会出现,通讯很正常。我现在的处理是,进入UART0接收中断服务时禁止UART1接收中断,然后处理文笔UART0来的数据帧后再开UART1的中断;同理,进入UART1接收中断服务时禁止UART0接收中断,然后处理文笔UART1来的数据帧后再开UART0的中断。但这样处理还是不近人意,不知道大家做这种双串口从站的通讯是如何处理的?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2016-12-7 16:49:13 | 显示全部楼层
说明你关中断的时间太长了。一般使用一个ringbuf来保存串口数据,中断只把数据写入就结束。然后用专门的处理线程从ringbuf里面读数据然后处理协议。

出0入50汤圆

发表于 2016-12-7 16:53:21 | 显示全部楼层
古二真。

不管什么芯片,进中断后,在中断里处理事务一定要简明扼要,把必须紧急处理的做好,其余的事情等出了中断,按照中断里做的标记,一个个判别去处理,如果都放在中断里完成,STM32这种速度的芯片也多半会自己内部先打起来。

出0入0汤圆

 楼主| 发表于 2016-12-8 09:50:45 | 显示全部楼层
ilikemcu 发表于 2016-12-7 16:53
古二真。

不管什么芯片,进中断后,在中断里处理事务一定要简明扼要,把必须紧急处理的做好,其余的事情等 ...

之前单串口时,是把处理数据帧的函数放在main函数中的,但是处理稍微滞后了些,后来就把它移到中断里,响应上位机的速度确实快了很多。后来变成双串口后,两个还是放在中断里,情况变得糟糕。现在你点醒了我,我把他们全都放到main来了,同时也不再两个串口互相禁止彼此接收和中断,由着他们来。另外之前对4个18b20、16个NTC的每10个数组的采样改为了每100ms单次采样一次,情况得到了大大的改善。上位机不再出现令人讨厌的“PLC no response”的字样(我是用另个威纶通的触屏作为上位机的)。再次感谢你!

出0入0汤圆

发表于 2016-12-8 21:39:04 | 显示全部楼层
软件模拟两个FIFO,接收中断往里写,主循环去读取.

出0入0汤圆

发表于 2016-12-8 22:33:44 | 显示全部楼层
两个串口STM32跑不过来,开玩笑吧!随便跑吧。

出0入9汤圆

发表于 2016-12-8 22:53:45 | 显示全部楼层
按照你的编程习惯,建议你把主芯片换成带硬件的FIFO的芯片
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 17:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表