coleyao 发表于 2013-3-22 11:47:15

【求助】双串口其中一个串口波特率上不去

MSP430F147使用双串口,串口1用作485通讯,100kbps波特率,无异常,串口0用作232通讯,只能用到9600波特率,再往上就出现丢数据现象,把串口1关掉就好了。想请教一下,不动硬件的基础上,是否有好的解决方法,在不降串口1通讯速率的前提下,提高串口0的通讯速率。

coleyao 发表于 2013-3-22 15:41:27

纠结,使尽浑身解数,也搞不定,就9600的波特率将就用吧!

Vmao 发表于 2013-3-22 15:49:45

你先用ttl串口线试一下,好转就是232芯片的问题,

jetlib 发表于 2013-3-22 16:36:59

两个同时用高波特率应该是没问题。你说的丢数据现象很可能是处理器速度不行,导致串口1中断接收时阻碍了串口2的接收。我曾试过在1M MCLK的430上,如果波特率超过38400,那我的中断就处理不过来了。所以解决问题的办法要么优化程序,提高中断处理速度;要么提高主频,提高处理速度。

jetlib 发表于 2013-3-22 16:41:21

其实想一下,如果串口速度到115200,那一个字节的接收时间大概是10us,如果处理器1M主频,相当于中断句柄中,如果有10条指令,那执行时间就差不多10us了,想此时提高中断处理速度的确非常困难。

coleyao 发表于 2013-3-22 20:40:38

应该是单片机忙不过来,不过令人疑惑的是9.6k没事,14.4k到57.6k都不行,现象都差不多,并没有说波率越高越严重。

jetlib 发表于 2013-3-22 23:01:53

这不已经显示了串口2的处理速度只能到9.6K么?如果高于9.6K就处理不过来了呗。你可以估算一下,9.6K,一个字节大概1ms,你的串口2处理速度有没有1ms。另外如果此时串口1也有数据,处理时间可不可能超过1ms?如果超过了,就说明处理不过来了呗。

coleyao 发表于 2013-3-23 07:49:07

8M晶振,1T指令 ,100K的串口都没事,没理由另一个串口19.2K就忙不过来的啊,毕竟串口处理代码几乎是一样的,100K的那个串口进5次接收中断,19.2K那个串口才进一次而已。

jetlib 发表于 2013-3-23 08:50:45

都说了,可能是串口1接收时阻塞了串口2的中断处理,而不是串口2自己阻塞自己。如果保证串口1不会阻塞串口2,那应该就是你程序的问题。另外如果主频上到8M,那处理速度应该没什么问题。2个串口都跑到115200大致相当于1个串口跑200多K。8M主频按我的测试应该能跑到300K的速度,所以两个串口都跑到100K的速度应该问题不大的。

ilikemcu 发表于 2013-3-23 10:47:10

高速的串口频繁中断,干扰了低速串口。你的串口中断程序要竭尽所能进行精简!而不是尽量。

祥子 发表于 2013-3-23 11:42:56

可能是代码处理的问题。把中断处理的代码段发上来瞅瞅

coleyao 发表于 2013-3-23 15:23:22

祥子 发表于 2013-3-23 11:42 static/image/common/back.gif
可能是代码处理的问题。把中断处理的代码段发上来瞅瞅

中断代码如图所示,感觉数据包的接收部分很精简,不啥复杂啊!

祥子 发表于 2013-3-23 23:07:28

coleyao 发表于 2013-3-23 15:23 static/image/common/back.gif
中断代码如图所示,感觉数据包的接收部分很精简,不啥复杂啊!


把中断里边的数据处理,放到中断外边吧。

中断里就负责接收数据,放入到缓冲区中
页: [1]
查看完整版本: 【求助】双串口其中一个串口波特率上不去