下载后可任意编辑第一章 问题提出由于 LPC214x USB 使用的晶振频率必须为 48MHz(经过倍频以后),对外接晶振有特别要求,不能使用标准的 11
0592MHz 晶振
因而在使用 USB 时,一般采纳 12MHz 晶振
而 12MHz 这样的晶振和标准波特率不成倍数关系,实际波特率和期望波特率往往不同
下表是低波特率时期望波特率和实际波特率的对比 可以看出低波特率时,实际波特率的误差比较小,对传输影响不大
而当期望波特率高达 115200 时,通过计算得到实际波特率为 125000,误差较大,同时实验结果也表明假如此时不对其进行修正,则根本无法进行正确传输
网上大多数说法是不要使用过高的波特率传输,避开其造成的丢码率太高,而作者通过实验讨论证明,通过使用小数波特率发生器,完全可以像低波特率时一样的正确传输,并且在其设定过程中,实现并应用了多位小数的分数逼近法的算法,从而科学地避开了其他人一直以来根据经验或者反复试验得出参数的人工计算过程,彻底实现波特率计算和修正的自动化
第二章 小数波特率发生器第一节 简介UART1 小数分频寄存器(U1FDR)控制产生波特率的时钟欲分频器,用户可根据需要进行读写
该预分频器接受 VPB 时钟,并经过指定的小数要求产生一个输出时钟,小数由该寄存器的值决定
UART1 小数分频寄存器(U1FDR)位描述下载后可任意编辑该寄存器控制波特率生成的始终预分频器
该寄存器的复位值为 UART1 禁能小数功能,以确保 UART1 的软件和硬件与没有该特性的 UART 完全兼容
故而代码中使用如下序列if( bps >= 115200) { Uart0SetFDR(bps); } Uart0SetDLML(bps); 可保证程序在高波特率时会设置小数波特率发生器,且低速率时也能正常工作
下面的等式用于计算 UART1 波特率:UART1b