关于CAN总线的波特率的计算



我是使用的LM3S2793控制器,在使用起CAN总线的时候因为要用到远距离的信号传输,其API函数中说网络长度很长或要严格延时的时候使用CANBitTimingSet()函数,因此我用了如下的配置, 

 tCANBitClkParms   can_ClkParms;
  //This value holds the sum of the Synchronization, Propagation, and Phase Buffer 1 segments, measured in time quanta.  The valid values for this setting range from 2 to 16.
  can_ClkParms.uSyncPropPhase1Seg=11;
  //This value holds the Phase Buffer 2 segment in time quanta.  The valid values for this setting range from 1 to 8.
  can_ClkParms.uPhase2Seg=4;
  //This value holds the Resynchronization Jump Width in time quanta.  The valid values for this setting range from 1 to 4.
  can_ClkParms.uSJW=4;
  //This value holds the CAN_CLK divider used to determine time quanta.The valid values for this setting range from 1 to 1023.
  can_ClkParms.uQuantumPrescaler=50;
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//使能CAN0所在的外设端口
  GPIOPinTypeCAN(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);//把指定的管脚配置成CAN功能
  GPIOPinConfigure(GPIO_PD0_CAN0RX);//把PA6配置成CAN0RX
  GPIOPinConfigure(GPIO_PD1_CAN0TX);//把PA7配置成CAN0TX
  SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);//使能外设CAN0
  HWREG(CAN0_BASE + CAN_O_CTL) = HWREG(CAN0_BASE + CAN_O_CTL) | CAN_CTL_CCE;//把CCE位置1
  CANInit(CAN0_BASE);//初始化CAN,必须要先调用此函数,然后才能首次使能控制器
  //实际的位速率由下式决定:
  //CAN_Clock / ((uSyncPropPhase1Seg + uPhase2Seg + 1) * (uQuantumPrescaler))
// CANBitRateSet(CAN0_BASE, SysCtlClockGet(),12500);//19200);SysCtlClockGet()
  CANBitTimingSet(CAN0_BASE,&can_ClkParms);
  CANEnable(CAN0_BASE);//使能报文处理的 CAN 控制器。一旦使能,控制器将自动发送任何挂起的帧,并对任何 接收到的帧作出处理。调用 CANDisable(),就可停止控制器。在调用 CANEnable()前, 应先调用 CANInit()来初始化控制器,并应通过调用 CANBitTimingSet()来对 CAN 总线进行配置。
  CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR| CAN_INT_STATUS);//使能特定的 CAN 控制器中断源。只有使能的中断源才能引起一个处理器中断。BIT5为1表示启用报文扰乱情况下自动重发功能
  IntEnable(INT_CAN0);
  IntMasterEnable();
 CANRetrySet(CAN0_BASE, true);

以上配置需要得到的位速率的100K,实际测量的是位速率是125K,请问这是为什么呢?

同样我要配置位速率是10K的时候,实际测量的位速率是12.5K,有人能给与解答么?