CAN总线通讯协议的每一帧可以看作一连串的电平信号,每一个电平信号代表一位(一个字节8位的位),所以一帧中包含了很多个位,由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。

一位又分为4段,同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)、相位缓冲段 2(PBS2)。

一位可以当作一条水平的时间轴,不同的段在整个时间轴的占比不一样,每一段又由若干个最小时间单元Time Quantum(以下称为 Tq)构成。

位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如表 11 所示。1 个位的构成如下图所示

在stm32的程序配置中,我们要通过位时序设置采样点和波特率。

CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_6tq;
CAN_InitStructure.CAN_Prescaler=5;

上面是一个设置的实例,在stm32程序设计中,初始化跟linux编程差不多,利用系统提供的结构体类型对其各个成员赋值,再调用系统的初始化函数。

CAN_Init(&CAN_InitStructure);

该函数参数就是上面配置好参数的结构体。

CAN_SJW:上面的表格有解释。(一般为1)CAN_BS1:时间段1(跟表格划分有区别)CAN_BS2:时间段2CAN_Prescaler:这个可以理解为系数,也叫波特率分频器

关于采样点和波特率的计算公式:

CAN波特率 = CAN时钟/( (1 + CAN_BS1 + CAN_BS2)  * CAN_Prescaler)
sample = ( 1 +  CAN_BS1) /  (1 +  CAN_BS1 +  CAN_BS2)

如果  CAN时钟为8M,CAN_BS1 = 9,CAN_BS2 = 6,CAN_Prescaler = 5

那么  波特率=8M/(1+9+6)/5=100K

采样点=(1+9)/(1+9+6)=62.5%

由上面可以看出来,同一波特率条件下,BS1、BS2可以有不同的组合,不同的组合采样点不同。

下面是刚才提到的两条公式的推导过程(可以不用理解,记公式即可):

采样点:

所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置如图所示处。所以从一个位的开始到采样点的时间占一个完整位的总时间的百分比就是所求的值:sample = ( 1 +  CAN_BS1) /  (1 +  CAN_BS1 +  CAN_BS2)。

波特率:

波特率是描述串口通讯的速度、速率的指标,指串口每秒传输多少位数据。有此得出波特率与一个位的时间的关系:

设CAN时钟的周期为Tclk,一个时间单元为Tq,正常位时间为Tn,输出波特率为Bcan。

注意:CAN总线通讯的波特率和采样点的设置影响通讯的稳定性和错误率等。上面提到的CAN总线初始化只提到几个参数,关于CAN_InitStructure结构体没有全部说明。

CAN总线-位时序、波特率、采样点相关推荐

  1. CANOpen系列教程04_CAN总线波特率、位时序、帧类型及格式说明

    CANOpen最新全套教程: 1.CANOpen系列教程01_初识CAN与CANOpen及相关内容 2.CANOpen系列教程02_理解CAN总线协议 3.CANOpen系列教程03_CAN收发器功能 ...

  2. 面对初学者的CAN总线入门教程(三)_CAN通信中帧、优先级、位填充、错误、位时序以及同步的介绍

    目录 1. 数据链路层中的帧 1.1 数据帧 1.1.1 帧起始(标准.扩展格式相同) 1.1.2 仲裁段 1.1.3 控制段 1.1.4 数据段(标准.扩展格式相同) 1.1.5 CRC 段(标准/ ...

  3. CAN 总线 之七 BOSCH CAN 位时序 和 同步

      CAN 支持 1 kBit/s 至 1000 kBit/s 的比特率.CAN 网络的每个节点都有自己的时钟发生器,通常是石英振荡器. 可以为每个 CAN 节点单独配置比特时间的定时参数(即比特率的 ...

  4. CAN总线的位时序与参数设置

    CAN总线的位时序与参数设置 CAN的位时序构成 CAN总线的每个位(Bit)的周期 Tbit = 1 / Baudrate.根据CAN规范,每个位的时间内又可细分成4段: 同步段(Synchroni ...

  5. CAN笔记(11) 位时序

    CAN笔记(11) 位时序 1. 位速率 2. 位时序 3. 位的构成 1. 位速率 由 发送单元 在 非同步 的情况下发送的 每秒钟的位数称 为 位速率 可以看看 位速率 与 波特率1 的关系:位速 ...

  6. CAN位时序及相关参数解读

    相关概念 位速率(也叫做比特率) 表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,R=1/T ,单位是bit per second,bps.比如,比特率为8bit/s,意思为一 ...

  7. S32K144中CAN位时序计算/CANFD波形分析

    1 CAN位时序计算 使用S32K144已经很久了,每次使用到CAN模块时总是忘记波特率.位时序怎么配置的,这里总结.记录一下. 上图是PE中CAN0的配置记录. 1.1 位时序 从上图中可以看到, ...

  8. I2C总线信号时序总结

    I2C总线信号时序总结 总线空闲状态  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电 ...

  9. MBus总线上自动波特率识别

    MBus总线上自动波特率识别 1.通过前导字节0x68,捕获引脚通过1.0比特的两个上升沿的差值除以2来自动识别出波特率. 2.为什么是通过两个上升沿,而不是一个上升沿一个下降沿,比如两个比特11的长 ...

最新文章

  1. CentOS6.*安装gitolite
  2. Laravel解决报错500 Server Error: .env.example将其复制一份重命名为env
  3. pxe装机原理_linux PXE装机详解(非常详细,小白专用)
  4. AT5160-[AGC037C]Numbers on a Circle【贪心,堆】
  5. IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法
  6. ios app开发简单实例--源代码管理的基本操作
  7. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  8. Single Number leetcode java
  9. 端到端车道线检测_弱监督对象检测-端到端培训管道
  10. java submit execute_ExecutorService中submit和execute的区别
  11. win10鼎信诺为什么安装不了_win10安装软件没反应怎么办
  12. Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
  13. 二十一个微信公众号推广技巧
  14. 几年基础架构的经验之谈[42 things I learned from building a production database]
  15. 彻底理解connection timeout
  16. 【转】如何从计算视角研究网络传播影响力最大化问题?
  17. 什么是5G?5G通信关键技术简介
  18. 盘点行业APP运营推广渠道有哪些
  19. Beyond Compare 设置打开文件的默认编码
  20. WikiTaxi_Importer_1.3.1 维基 离线数据库

热门文章

  1. LightCounting预测以太网光模块市场未来5年18%增速
  2. Linux命令:ps,netstat,top
  3. fdisk 磁盘分区命令
  4. kafka java客户端编程
  5. web.config中httpRunTime的属性(转)
  6. centos+nginx+php+mysql(经典架构流程案例)
  7. html入门学习(二)
  8. 一文彻底掌握Apache Hudi异步Clustering部署
  9. java 内存模型程序计数器和虚拟机栈
  10. Kubernetes 桌面客户端:Lens