您的位置 首页 电子

STM32 CAN总线传输波特率的核算

STM32 CAN总线传输波特率的计算-由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯。

自己用的单片机STM32F407,其它类型的单片机相似,可做参阅!

一、规范CAN协议位时序概念

因为CAN归于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间运用约定好的波特率进行通讯。

一起,CAN还运用“位同步”的方法来抗干扰、吸收差错,完成对总线电平信号进行正确的采样,保证通讯正常。

为了完成这个位同步,CAN协议将每个位的时序分解为四段:SS段、PTS段、PSB1段、PBS2段。一起界说最小的时刻单位:Tq,四个段的长度用x个Tq表明,加起来便是一个位的时序。

用一个图来表明可能会形象一点,如图一个位的时序便是19Tq。

STM32 CAN总线传输波特率的核算

以上便是CAN规范协议界说的位时序,而STM32的外设简化了这个规范。

二、STM32中CAN总线位时序概念

STM32的CAN外设位时序中只包括3段:同步段SYNC_SEG、位段BS1(兼并了PTS段和PSB1段)和位段BS2。

STM32 CAN总线传输波特率的核算

其间SYNC_SEG的长度固定为1Tq,其它两段的长度可在CAN_BTR中设置。

STM32 CAN总线传输波特率的核算

这儿咱们要注意一个细节,BS1段的时刻长度其实是等于咱们写入的值+1的,相同BS2段也是。

三、波特率的核算

在设定了BS1段和BS2段的长度后,咱们就可以确认每个CAN数据位的长度了。

BS1段时刻:Ts1 = Tq * (TSI1[3:0] + 1)

BS2段时刻:Ts1 = Tq * (TSI2[2:0] + 1)

一个数据位的时刻:T1bit = 1Tq + Ts1 + Ts2

依据一个数据位的时刻可知:波特率 = 1/T1bit

这个式子还有Tq一个不知道数了。

在CAN外设装备中还有一个与波特率有关的参数是BRP(波特率预分频器)

STM32 CAN总线传输波特率的核算

我运用的STM32F407的CAN1外设是挂载在APB1总线上的,它的默许时钟频率为45M,Tpclk=1/45M。

依据BRP参数的界说:Tq = BRP[9:0] * Tpclk

这样Tq的值就算出来了,带入上面波特率的核算公式就可以求得CAN总线传输的波特率了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/343744.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部