9回答

0收藏

[求助] 串口发送数据的时间

TI TI 4642 人阅读 | 9 人回复 | 2014-10-06

用430串口发送数据给舵机,我们一个工作周期20ms,给舵机发送数据11个字节,波特率用9600

那么传送数据时间=11*8/9600=9.17ms

问题是,430的发送时间也是9.17ms么?在线路上的传送时间是9.17ms没错。

现在我理解的是:数据我是用循环中断的方式发送的。430的TXbuff是一个字节的,所以只能一个字节一个字节的发,在发送这11个字节的9.17ms期间,cpu干不了其他工作,只能串口发送数据吗?

如果是pc机串口发送11字节的话,由于电脑缓存大,11个字节准备好后就可以干其他的事了吗?9.17ms其他时间可以做其他工作。
分享到:
回复

使用道具 举报

回答|共 9 个

倒序浏览

沙发

shower.xu

发表于 2014-10-6 14:50:17 | 只看该作者

你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区。
当你循环发送的时候,你可以打开发送完成中断,来往发送缓冲区填数据。不占用cpu
板凳

menghubei

发表于 2014-10-6 15:16:03 | 只看该作者

shower.xu 发表于 2014-10-6 14:50
你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

发送完成后,通过中断再发送下一个字节码?
地板

shaoziyang

发表于 2014-10-6 15:40:03 | 只看该作者

menghubei 发表于 2014-10-6 15:16
430的发送缓冲区只有一个字节,也就是说在发着一个字节的时间内cpu可以干其他的,

发送完成后,通过中断 ...

就是这样。
5#

menghubei

发表于 2014-10-6 19:17:17 | 只看该作者

shaoziyang 发表于 2014-10-6 15:40
就是这样。

比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;

#############################
#pragma vector=UART0TX_VECTOR
__interrupt void usart0_tx (void)
{
  if(i<9)
   TXBUF0 = string2[i++];
}
#############################

执行下面语句后:
TXBUF0=string2[0];
就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?


6#

menghubei

发表于 2014-10-6 19:18:04 | 只看该作者

shower.xu 发表于 2014-10-6 14:50
你计算的时间是发送的时间,发送由串口模块硬件完成,不占用cpu时间。你需要做的只是把数据放到发送缓冲区 ...

比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;

#############################
#pragma vector=UART0TX_VECTOR
__interrupt void usart0_tx (void)
{
  if(i<9)
   TXBUF0 = string2[i++];
}
#############################

执行下面语句后:
TXBUF0=string2[0];
就进入中断发送了,但是中断里面又给TXBUF0赋值了,也就是继续发送。
程序一直在中断里面啊,没出过中断,cpu如何进行其他工作?
7#

shaoziyang

发表于 2014-10-6 21:43:25 | 只看该作者

menghubei 发表于 2014-10-6 19:17
比如我这个中断发送程序:
我想发送一帧数据存在string2数组中;

一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

有的CPU是缓冲区空就能进中断,这时一般发送缓冲区是有多字节的。
8#

cmyldd

发表于 2014-10-7 06:55:39 | 只看该作者

要不要考虑硬件的响应时间呢?
9#

menghubei

发表于 2014-10-7 08:59:53 | 只看该作者

shaoziyang 发表于 2014-10-6 21:43
一般是当发送完成后,才会进入中断。发送的这段时间,MCU就可以做其他任务。

有的CPU是缓冲区空就能进中 ...

如果是发送完成才进入中断就可以理解了,给txbuf赋值后,usrt马上进行发送,此时cpu可以进行其他工作;
当发送完成后,在中断里继续赋值,退出中断,uart发送数据,cpu执行其他程序。

感觉豁然开朗
10#

menghubei

发表于 2014-10-7 09:01:50 | 只看该作者

cmyldd 发表于 2014-10-7 06:55
要不要考虑硬件的响应时间呢?

硬件响应时间应该微妙级的
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条