如果你用LPC900进行UART通讯,而且又是自动波特率的话,<br />可以这样来看<br /><br /> PC端(主机端)发送STX(0x02),由定时器0去捕获RXD的下降沿,<br />UART的发送是LSB在前,之前还有个起始位,我们可以用定时器测量出低电平的时间,这个时间就是2bit数据发送的时间,那么:<br /><br /> 1.波特率计算公式:Fbaud=Fosc/((BRGR1:BRGR0)+16)<br /> (BRGR1:BRGR0) =(Fosc/Fbaud)-16<br /> pclk = fosc/2;<br />2.<br /> timer0 的值 x对应的时间t 是2个bit位的时间<br /> t与波特率 BPS的关系为 t = 2/Fbaud<br /> t = x/pclk = 2x/fosc<br /> -><br /> 2x/fosc = 2/Fbaud;<br /> -><br /> x/fosc= 1/Fbaud;<br /> Fbaud = fosc/x;<br /> (BRGR1:BRGR0) =(Fosc/Fbaud)-16<br /> (BRGR1:BRGR0) =(Fosc/(fosc/x))-16 <br /> (BRGR1:BRGR0) = x-16;<br />也就是,把定时器0的值减去16后作为BRGR1:BRGR0即可比较准确的产生。<br /><br /> 误差分析: 定时器捕获低电平的误差,粗略可以考虑有2-3个PCLK的<br /> 误差,以内部7.3728MHz 的频率,最高115200bps,<br /> x= 7.3728*10^6/115200=64<br /> 误差后的X位61-67 <br /> 实际波特率为:Fbaud=Fosc/x 5% -4.5%<br /> 那么实际波特率低一点,误差就可以成倍的降低。<br />而且看起来,和实际晶振与标称值的误差没有关系。<br /><br /> 以上粗略分析,请做参考,也请各位大侠指正。<br /><br /> <br /><br />
|