打印

串口uart一次发送多个数据疑问

[复制链接]
6839|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tang221986|  楼主 | 2013-3-5 13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一下在主程序中串口一次发送多个数据,程序是查询uart发送完成标志,发送完成继续发送下一个数据,那么如果数据较多,主程序是不是一直在等待数据发送完成,这样程序在uart发送数据伤耽误的时间很长,程序要等待uart发送完成才能继续运行下面的程序,比如说以9600波特率发送50个8位数据,一个8位数据大概需要1ms,那么发送完50个数据需要大概50ms,那么主程序在uart发送中就要等待50ms才能继续运行下面的程序,其他 程序运行实时性就很难得到保证了。不知道我理解的对不对,有没有什么好的方法思路用uart一次发送多个8位数据。
谢谢!

相关帖子

沙发
huangqi412| | 2013-3-5 14:11 | 只看该作者
中断。。。
发送完成中断/数据空中断,   

使用特权

评论回复
板凳
原野之狼| | 2013-3-5 14:18 | 只看该作者
这是非常经典的采用查询方式还是采用中断方式来使用uart的案例,对于LZ提到的情形,显然应该采用后者。

使用特权

评论回复
地板
ayb_ice| | 2013-3-5 15:02 | 只看该作者
队列+中断

使用特权

评论回复
5
lzqxs89| | 2013-3-5 16:15 | 只看该作者
原野之狼 发表于 2013-3-5 14:18
这是非常经典的采用查询方式还是采用中断方式来使用uart的案例,对于LZ提到的情形,显然应该采用后者。 ...

可不可以考虑把其它的模块程序插入在这 50ms 中呢?

使用特权

评论回复
6
tang221986|  楼主 | 2013-3-5 18:14 | 只看该作者
ayb_ice 发表于 2013-3-5 15:02
队列+中断

字虽少,精华犹在,谢谢!

使用特权

评论回复
7
diweo| | 2013-3-5 19:54 | 只看该作者
在正常情况下,9600bps太慢了。可以提高速度试试

使用特权

评论回复
8
学生会干部| | 2013-3-5 21:14 | 只看该作者
lzqxs89 发表于 2013-3-5 16:15
可不可以考虑把其它的模块程序插入在这 50ms 中呢?

你**试试

使用特权

评论回复
9
jlass| | 2013-3-6 15:53 | 只看该作者
本帖最后由 jlass 于 2013-3-6 15:55 编辑

都没说到关键点

串口是采用fifo缓冲的,你的程序是先把8个数据依次写到fifo中(假设fifo的深度为8),然后就可以去干其他事情了,只要在足够快的时间内去检查fifo是否传完了(轮询),fifo告知你已经传完了(中断)之后,在依次写多个数据(需确认fifo是否为满),如此循环。

使用特权

评论回复
10
tang221986|  楼主 | 2013-3-18 17:31 | 只看该作者
jlass 发表于 2013-3-6 15:53
都没说到关键点

串口是采用fifo缓冲的,你的程序是先把8个数据依次写到fifo中(假设fifo的深度为8 ...

哥st的uart很多没有fifo,只有dma,所以如果数据不多,强烈建议uart带fifo,谢谢大家!

使用特权

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

本版积分规则

16

主题

122

帖子

0

粉丝