访问电脑版页面

导航:老古开发网手机版STM32单片机与CAN总线

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

导读:
关键字:
波特率,STM32,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总线传输的波特率了。

来源:博客园   作者:佚名  2019/11/10 9:02:00
栏目: [ STM32单片机与CAN总线]

相关阅读

STM32单片机对CAN过滤器的设置方法

详解stm32的CAN控制器(程序分享)

STM32F3—CAN通信自发自收

基于STM32F1O5的CAN总线中继器的设计与实现

基于STM32F105微控制器的双CAN冗余设计方案

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

STM32系列第25篇--CAN总线

基于STM32和CAN总线的电动车电池管理系统设计

调试STM32F107的CAN模块

STM32和CAN总线在温度监控系统中的应用

STM32单片机的can总线的配置

STM32单片机bxCAN的工作模式解析

STM32的can现场总线的特点及工作流程分析