高级外设CAN之波特率计算

汽车电子讲坛 2014-01-16 09:44:49
在做技术支持的时候,经常接到这样的客户电话,“在使用开发板上的CAN通信时,VPB时钟为和光盘例程里的不一样,CAN波特率怎么设置?我们希望用到的CAN波特率有5K、10K、50K、500K、1000K等”。CAN波特率设置不正确将导致CAN无法通信,于是,就波特率计算的方法我写了这篇文章,以后再有客户问这类问题,便可以直接把这篇文章发给客户。

CAN波特率的计算公式如下:


其中tcan是CAN系统时钟的一个周期,tbit是一个CAN位周期。

以VPB时钟Fpclk=24MHz,选择采样点位置在85%左右为佳,即使TESG1/(TESG1+TESG2)在85%左右,2<TESG1<15,1< TESG2<7,由此,我们通过计算得到BRP、TESG1、TESG2,再将值写入到CANnBTR寄存器,如下:

BPS_1000K 0x140002
BPS_800K 0x160002
BPS_500K 0x1C0002
BPS_250K 0x1C0005
BPS_125K 0x1C000B
BPS_100K 0x1C000E
BPS_50K 0x1C001D
BPS_20K 0x1C004A
BPS_10K 0x1C0095

现在以500Kbps为例,首先得到(3 + TESG1 + TESG2) *(BRP+1)= 48, 满足TESG1 /(TESG1 + TESG2)在85%左右,2<TESG1<15,1< TESG2<7条件的有两组组合:



第一组采样点在88%左右,第二组采样点在84%左右,所以我们取第二组,得到TESG1=11,TESG2=2,BRP=2,代入得到CANnBTR寄存器值为0x1C0002。
对于另一个常用的Fpclk=11.0592MHz,同样可以得出相应CANnBTR寄存器值,在此给出部分值,您可以根据自己的需要计算对应的值。
500k 0x170001
250k 0x170003
125k 0x170007
100k 0x170009
50k 0x1700013
20k 0x170031
10k 0x170064
5k 0x1700c8




...全文
255 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6,721

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 Google技术社区
社区管理员
  • Google技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧