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

[复制链接]
7792|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 | 显示全部楼层
队列+中断
lzqxs89 发表于 2013-3-5 16:15 | 显示全部楼层
原野之狼 发表于 2013-3-5 14:18
这是非常经典的采用查询方式还是采用中断方式来使用uart的案例,对于LZ提到的情形,显然应该采用后者。 ...

可不可以考虑把其它的模块程序插入在这 50ms 中呢?
 楼主| tang221986 发表于 2013-3-5 18:14 | 显示全部楼层
ayb_ice 发表于 2013-3-5 15:02
队列+中断

字虽少,精华犹在,谢谢!
diweo 发表于 2013-3-5 19:54 | 显示全部楼层
在正常情况下,9600bps太慢了。可以提高速度试试
学生会干部 发表于 2013-3-5 21:14 | 显示全部楼层
lzqxs89 发表于 2013-3-5 16:15
可不可以考虑把其它的模块程序插入在这 50ms 中呢?

你**试试
jlass 发表于 2013-3-6 15:53 | 显示全部楼层
本帖最后由 jlass 于 2013-3-6 15:55 编辑

都没说到关键点

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

粉丝
快速回复 在线客服 返回列表 返回顶部