飞思卡尔K60系列的UART的波特率设置问题

1:BRFD的用处
在K60的数据参考手册的第1552页中有给出一道波特率的求解公式
UART baud rate = UART module clock / (16 × (SBR[12:0] + BRFD));即波特率=UART时钟频率/[16*(SBR寄存器的值+BRFD)];,
BRFA是一个5位的精细调整寄存器(位于UARTx_C4寄存器的低5位),其数值除以32为BRFD的值,易知BRFD为0-1间的小数。BRFD是为了使得公式计算出来的波特率接近于常用的波特率,说白了,就是减小误差。
具体分析如下:若不设置BRFA寄存器,则BRFD=0,那么根据公式则有:UART baud rate = UART module clock / (16 × SBR[12:0] );比如UART时钟频率为10.2MHZ,如果要求波特率为38400,那么SBR[12:0]=17时,得出结果为10.2M/16/17=37500;若SBR[12:0]=16,结果为39843.75,可见无论取17还是16,都与38400有误差,且误差比较大。误差出现的原因在于整数相除,如果分母能够为小数,则误差会小很多,BRFD就是专门来为分母提供小数部分的。BRFA寄存器共5位,从00000-11111,BRFD=BRFA[4:0]/32,结果必然为从0到31/32的小数;上面的例子中,取BRFA=10011B=19D;那么BRFD=19/32=0.59375;SBR[12:0]=16;波特率=10.2M/16/16.59375=38418,明显的,该波特率已经非常接近38400了,误差小了很多,这都是BRFA寄存器的功劳。
2:波特率的数值设置
根据上面给出的公式,波特率的设置问题就不难了。
比如设置波特率为9600(可以是其他的值),且已知UART时钟频率(单位为MHZ,一般k60的UART0,UART1时钟频率为系统时钟频率,UART2-UART5的频率为总线时钟频率),据公式可得SBR[12:0]+BRFD=clock*10^6/16/9600,结果必然为一小数,整数部分为SBR[12:0],小数部分为BRFD,所以只需对其取整即可,即SBR[12:0]=(uint32_t)clock*10^6/16/9600;接下来就可以求BRFD了,已知SBR[12:0],那么
BRFD=clock*10^6/16/9600-SBR[12:0],等式两边同乘以32,BRFA=BRFD*32=clock*10^6/4800-SBR[12:0]*32;至此,寄存器的值都求解完成,SBR[12:8]赋值给UART_BDH寄存器低5位,SBR[7:0]赋值给UART_BDL寄存器;BRFA赋值给UARTx_C4的低5位。
至此,波特率设置的难点已经解决。
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值