打印
[ZLG-ARM]

请教串口问题

[复制链接]
1994|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eaglewing|  楼主 | 2007-3-19 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zlgARM| | 2007-3-19 11:38 | 只看该作者

RE

用11.0592MHZ或12MHZ晶振试试。确定究竟是晶振等硬件因素还是软件设置的问题。
此外,您的晶振频率能保证您获得精确的波特率吗?

使用特权

评论回复
板凳
liujigan| | 2007-3-19 12:58 | 只看该作者

不使用PLL时,我也会出现这种现象,使用PLL后就好了

使用特权

评论回复
地板
eaglewing|  楼主 | 2007-3-19 16:18 | 只看该作者

做了个实验

做了个实验,分别使用8M和11.0592M晶振
在使用11.0592晶振的条件下,不使用PLL,VPB不分频,可以得到正确的数据。
在8M晶振时,得不到正确的数据。

是不是说LPC2000系列若想使用串口,只能用11.0592晶振呀?

使用特权

评论回复
5
zlgARM| | 2007-3-19 17:48 | 只看该作者

RE

不是。LPC2000系列可以支持1~30MHZ的晶振。

首先要搞清楚,您若需要得到您想要的波特率是需要设置的,建议您看一下串口波特率设置的知识点。

我在这儿简单介绍一下:

首先要弄清楚的是,串口的波特率是来自于外设时钟,其值由外设时钟决定。

而外设时钟又由晶振、PLL、VPB三者一起决定。

同样的设置,您的晶振换了,而您的PLL、VPB都没变,那么外设时钟变了。
这就相当于一个单调函数,其输入变量换了一个,函数关系没变。在这样的情况下,您还能指望函数输出的结果不变吗?

使用特权

评论回复
6
eaglewing|  楼主 | 2007-3-19 20:26 | 只看该作者

是我搞错了,谢谢

我上次实验用的波特率只是115200,以后改成9600,或4800就全行了.....。这是为什么呀?在《深入浅出LPC213X》里关于波特率设置中没有提到关于这个的。

使用特权

评论回复
7
zlgARM| | 2007-3-20 08:31 | 只看该作者

RE

TO:鹰翼
   从您没想到要设置PLL、UU0DLL、U0DLM等寄存器来看,估计您是在程序里改了目标波特率。但是,那是由于程序本身已经根据您设置的波特率(初始条件已经确定,函数关系已经确定,只要由函数值去逆推自变量)按公式完成了对寄存器的设置,所以您怎么改都没问题。可是您把晶振都换了,初始条件变了,程序却不知道您换了晶振,再按照原来的方式计算,自然出错。
   这只是我的猜测,供您参考。
  

使用特权

评论回复
8
eaglewing|  楼主 | 2007-3-20 09:06 | 只看该作者

啊!您怎么看出我没有设置那几个寄存啦??

由于我用的8M晶振,所以根据用户手册,片内PLL不起作用,因为若要使用PLL,外部晶振的频率输入要大于等于10M。初始化串口的时候U0DLL和U0DLM我都设置过了。问题是8M晶振下,我发现波特率为115200时串口工作不正常。这个时候U0DLL=0x04,U0DLM=0.

使用特权

评论回复
9
zlgARM| | 2007-3-20 10:56 | 只看该作者

RE

TO:eaglewing
    
    您是否有注意Fpclk呢?能否得到正确的波特率不是光晶振一个决定的,还需要根据晶振的情况设置好寄存器,此外计算公式也要正确。

使用特权

评论回复
10
eaglewing|  楼主 | 2007-3-20 12:09 | 只看该作者

唉,网上讨论点问题咋这么费劲呀!

注意到了(八百万)8000000。我可以肯定地告诉您,一切问题我都注意到了,只是发现晶振八百万下115200波特率不好用。不知道为什么。您若不信可以自己试试

使用特权

评论回复
11
Swd21ic| | 2007-3-20 12:37 | 只看该作者

~~

楼主貌似很气愤..哈哈

使用特权

评论回复
12
liujigan| | 2007-3-20 12:43 | 只看该作者

aa

可能是误差造成的吧,算完后是4.34,这样U0DLM=0x04;四舍五入造成的吧,换个晶振算完后可能就没有这样大(0.34)的误差了。

使用特权

评论回复
13
zlgARM| | 2007-3-20 13:32 | 只看该作者

RE

eaglewing:
    不好意思!原来您是这个意思,抱歉我没理解您的话。抱歉抱歉!
    确实,当晶振本身提供的频率按公式计算,怎么计算都计算不到精确的波特率配置值时,会导致误差过大,使得获得的UART波特率不准。这个时候,可以考虑使用UART的小数分频寄存器。

使用特权

评论回复
14
dlwlmlj| | 2007-3-20 15:49 | 只看该作者

费劲了 还没整明白

使用特权

评论回复
15
weald2000| | 2007-3-21 15:00 | 只看该作者

这个问题我也碰到过

其实大多数情况下串口波特率都是有一定误差的,这个误差率与频率有关,所以如果要使用串口接收或发送数据的话就必须选择导致误差率尽可能小的晶振,否则的话就会出现收到的数据不对的现象。

特别说明我是在使用H8、51系列的MCU时碰到过类似情况,个人认为ARM应该也存在这种现象。本人刚刚接触ARM才几天,对ARM的了解非常可怜,说得不对可别怪我:)

使用特权

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

本版积分规则

5

主题

15

帖子

0

粉丝