打印
[国产单片机]

关于UART/IIC接收时序问题

[复制链接]
871|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fcccc|  楼主 | 2021-2-2 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题背景:
系统有一个高优先级中断,服务函数执行时间100us-3ms随机,硬限制,已经无法调整.
需要一个串行接口与上位机双向通信;芯片没有DMA,没有带FIFO的UART或者IIC;

现在时不时通信被中断3ms,期间发过来的数据都会丢失.
这个时序如何设计能保证可以不丢失上位机发过来的数据?


使用特权

评论回复

相关帖子

沙发
叶春勇| | 2021-2-2 23:21 | 只看该作者
貌似,再加个双串口单片机,做个中转?主单片机,空闲去查询串口单片机有数据没?

使用特权

评论回复
评论
fcccc 2021-2-5 20:03 回复TA
相当于加个单片机做FIFO,这个代价有点高. 
板凳
ayb_ice| | 2021-2-3 08:22 | 只看该作者
在他的服务里加个自己的函数

使用特权

评论回复
地板
mailshichao| | 2021-2-3 08:42 | 只看该作者
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈

使用特权

评论回复
5
ayb_ice| | 2021-2-3 08:51 | 只看该作者
波特率搞低些

使用特权

评论回复
6
dlutccj| | 2021-2-3 09:35 | 只看该作者
加入握手机制,告诉上位机什么时间下位机可以接收指令

使用特权

评论回复
7
coody| | 2021-2-3 15:11 | 只看该作者
再另用一个单片机先收下数据,然后用间隔大于3ms来一个一个字节发给这个单片机。

使用特权

评论回复
8
xyz549040622| | 2021-2-3 18:01 | 只看该作者
什么也没有,肯定是很容易被打断的。只能是尝试降低速度了。

使用特权

评论回复
9
ayb_ice| | 2021-2-4 08:50 | 只看该作者
本帖最后由 ayb_ice 于 2021-2-4 08:58 编辑

波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成前将上一字节取走就可以了

2.08MS*2 > 3ms
2400波特率肯定是完全符合要求的

使用特权

评论回复
10
fcccc|  楼主 | 2021-2-5 19:55 | 只看该作者
本帖最后由 fcccc 于 2021-2-5 20:13 编辑
dlutccj 发表于 2021-2-3 09:35
加入握手机制,告诉上位机什么时间下位机可以接收指令

对这个思路很好,问题的主要难点在于中断是外部事件驱动的,也就是说发生的时机和间隔时间无法确定.
如果中断完成时候告诉上位机发送,如果突然又发生一次中断就会出问题.
这样的话将会是一个偶尔出现的故障点.

使用特权

评论回复
11
fcccc|  楼主 | 2021-2-5 19:56 | 只看该作者
ayb_ice 发表于 2021-2-4 08:50
波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成 ...

这也是个办法,谢谢指点.

使用特权

评论回复
12
fcccc|  楼主 | 2021-2-5 20:19 | 只看该作者
mailshichao 发表于 2021-2-3 08:42
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
...

感谢指点,目前来看确实是需要反馈机制,设计个协议来处理了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

452

帖子

1

粉丝