找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2326|回复: 7
打印 上一主题 下一主题
收起左侧

STM32C8T6单片机如何让三串口同时通信不出现相互干扰?

[复制链接]
跳转到指定楼层
楼主
ID:506700 发表于 2022-1-4 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在做一个工业控制电机同时还要采集传感器数据项目遇到个问题,单片机芯片用的stm32c8t6用了3个串口,协议是MODBUS_RTU串口协议,一个串口接MCGS屏幕就地控制(就地屏幕是主机,板子是从机),一个串口接远程控制(远程屏幕是主机,板子是从机),还有一个串口接传感器接收数据(板子是主机,传感器是从机),屏幕是500ms采集一次 200ms等待时间,远程也是一样。但是会出现一个问题就是远程控制的时候,经常会打断就地屏幕上的数据采集,屏幕是MCGS,一旦被打断就会显示通信错误。如何能做到3个串口同时通信(一直收发数据)而互不干扰,没有用ucos,写的裸程序。有没有大佬给个思路...感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-1-4 17:33 | 只看该作者
接收中断里面只负责接收数据放到队列里面,主循环里面处理接收数据。
回复

使用道具 举报

板凳
ID:313048 发表于 2022-1-4 18:09 | 只看该作者
每个串口独立中断,像沙发所说,中断里面做数据接收,弄3个循环队列存储数据,在主函数里面去做相应的处理就可以了。
回复

使用道具 举报

地板
ID:506700 发表于 2022-1-5 08:51 | 只看该作者
AUG 发表于 2022-1-4 18:09
每个串口独立中断,像沙发所说,中断里面做数据接收,弄3个循环队列存储数据,在主函数里面去做相应的处理 ...

我去试一试
回复

使用道具 举报

5#
ID:506700 发表于 2022-1-5 08:51 | 只看该作者
Hephaestus 发表于 2022-1-4 17:33
接收中断里面只负责接收数据放到队列里面,主循环里面处理接收数据。

我去试试,十分感谢
回复

使用道具 举报

6#
ID:506700 发表于 2022-1-5 08:52 | 只看该作者
AUG 发表于 2022-1-4 18:09
每个串口独立中断,像沙发所说,中断里面做数据接收,弄3个循环队列存储数据,在主函数里面去做相应的处理 ...

非常非常谢谢
回复

使用道具 举报

7#
ID:592807 发表于 2022-1-5 08:55 | 只看该作者
我觉得你应该学习一下硬汉的USART_FIFO模式,据说他最多能同时驱动6个串口。硬汉永远的神

usart_fifo.rar

7.35 KB, 下载次数: 40

回复

使用道具 举报

8#
ID:506700 发表于 2022-1-5 11:21 | 只看该作者
Hephaestus 发表于 2022-1-4 17:33
接收中断里面只负责接收数据放到队列里面,主循环里面处理接收数据。

但是我有一个定时器要给传感器每200ms发送命令,这个会影响main函数里面的操作吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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