CAN通信波特率的计算是一个难点,要正确计算设置CAN波特率。CAN2.0协议中定义标称位速率为一理想的发送器在没有重新同步的情况下,每秒发送的位数量,也就是我们说的波特率。

位时间由若干个时间单元(Tq)或者称为时间份额组成。那么位CAN消息中最小的时间份额由下式计算:

PRESDIV 为预分频因子, Fcanclk为CAN模块时钟源频率。

CAN2.0协议中规定要求每一位可以划分为几个不重叠时间片段,分别是:

同步段(Synchronization segment)

传播段(Propagation segment)

相位缓冲段1(Phase segment 1)

相位缓冲段2(Phase segment 2)

同步段:

位时间的同步段用于同步总线上不同的节点。这一段内要有一个跳变沿。

传播段:

传播段用于补偿网络内的物理延时时间。它是总线上输入比较器延时和输出驱动器延时总和的两倍。

相位缓冲段 1、相位缓冲段 2 PHASE SEG1 PHASE SEG2):

相位缓冲段用于补偿边沿阶段的误差。这两个段可以通过重新同步加长或缩短。

采样点:

采样点是读总线电平并解释各位的值的一个时间点。采样点位于相位缓冲段1( PHASE_SEG1)之后。

信息处理时间 (INFORMATION PROCESSING TIME

信息处理时间是一个以采样点作为起始的时间段。采样点用于计算后续位的位电平。

同步段(SYNC_SEG)为 1 个时间份额;传播段( PROP_SEG)的长度可设置为 1, 2, …, 8 个时间份额;缓冲段 1 ( PHASE_SEG1)的长度可设置为 1, 2, …, 8 个时间份额;相位缓冲段 2( PHASE_SEG2 )的长度为阶段缓冲段 1 ( PHASE_SEG1 )和信息处理时间( INFORMATIONPROCESSINGTIME)之间的最大值;信息处理时间少于或等于 2 个时间份额。一个位时间总的的时间份额值可以设置在 8—25 的范围。

在清楚了位时间的构成后,我们以飞思卡尔kv4x系列MCU为例说明如何计算CAN波特率

我们知道飞思卡尔KV4xMCU的CAN模块有两种时钟源可选,外设时钟时钟源和晶振时钟源,所以分两种情况来说明

例子:假设系统使用8M晶振,经过PLL倍频后输出144M作为系统时钟,外设也是144M,要求设定波特率为250kbps,CAN模块选择外设时钟源。如果使用peripheral clock 则设置 CAN_CTRL1 bit13 为1。

配置波特率主要是配置控制寄存器1

对照数据手册配置波特率:

首先配置预分频参数PRESDIV 为47

则可计算:

配置寄存器传播段域为2,则传播段时间 = (2 + 1)Tq

配置寄存器相位缓冲段1域为3,则相位缓冲段1时间 = (3+1)Tq

配置寄存器相位缓冲段2域为3,则相位缓冲段2时间 = (3+1)Tq

同步段不用配置,固定为1个Tq

则波特率 = 1/(1+3+4+4)Tq 将(2) 带入可计算出:

其他波特率值可类似计算,具体应用时候还要参考数据手册的限制条件,这四个值都有范围限制。

例子:假设系统使用8M晶振,经过PLL倍频后输出144M作为系统时钟,外设也是144M,要求设定波特率为250kbps,CAN模块选择晶振时钟源。

首先配置预分频参数PRESDIV 为3

其他波特率值可类似计算,具体应用时候还要参考数据手册的限制条件,这四个值都有范围限制。

在CAN 驱动中如果使用外部8M晶振作为CAN模块时钟源,必须配置CAN_CTRL1 bit13为0,选择can模块使用外部时钟,同时必须正确配置MCG_C2和OSC_CR寄存器,才能正常工作,否则CAN模块不能正常通讯。

MCG_C2 |=MCG_C2_EREFS_MASK;

// Enable ERCLK clock to FlexCAN

OSC_CR |= OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK;

各位亲,是否学会了如何计算CAN通讯波特率呢?如果你喜欢本文,请分享给你的朋友。

如何计算CAN通信波特率相关推荐

  1. STC89C51 串口通信波特率设置

    STC89C51 串口通信波特率设置 //9600T2L = 0xE0; //设定定时初值T2H = 0xFE; //设定定时初值//115200T2L = 0xE8; //设定定时初值T2H = 0 ...

  2. STM32F103 CAN通信波特率的计算方法

    前言 最近看一下CAN通信,翻出来之前做过的STM32 CAN通信的项目代码,有些概念比较模糊了,如波特率是怎么计算的. 最近接触rt-thread比较多,想把之前的CAN通信的代码,移植到RTOS上 ...

  3. STM32-串口通信波特率计算以及寄存器的配置详解

    串口通信基本原理 处理器与外部设备通信的两种方式 并行通信 传输原理:数据各个位同时传输. 优点:速度快 缺点:占用引脚资源多 串行通信 传输原理:数据按位顺序传输 优点:占用引脚资源少 缺点:速度相 ...

  4. STC15F2K60S2串口通信/波特率设置/通信初始化/发送(接收)一个数据教程

    STC15F2K60S2串口通信 . . 一.先斩后奏,上代码!!!! 先强调:通常我们做单片机与单片机通信.单片机与PC通信.PC与PC串口通信,基本选择方式1的串口通信方式,下面的讲解中我会详细的 ...

  5. CAN通信波特率与每秒收发帧数

    波特率: 上两图来自STM32F4XX中文参考手册 波特率与帧时间计算 上图片来自:点击打开链接 如何测量CAN总线的波特率? 点击打开链接

  6. 串口通信波特率数据错乱

    如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf){case 0: P2_0=0;//unsigned char ...

  7. STC12C5A60S2串口通信(使用独立波特率发生器)

    快速导航 STC12已封装好的函数库 使用STC12C5A60S2做串口通信波特率初始化可以使用STC-ISP波特率计算器自动生成 本Demo使用STC12独立波特率发生器,晶振11.0592,波特率 ...

  8. 波特率9600是什么意思 串口通信为什么要设置波特率

    波特率9600是什么意思 波特率是一个电子信号上的术语,用于描述信道的数据传输速度.所谓信道,可以是无线的,也可以是有线的,说白了就是两个东西之间传输数据. 波特率通常单位是bit/s,也就是 二进制 ...

  9. 单片机c语言波特率检测,基于MSP430系列微控制器串口通信时的波特率自动检测的实现...

    通常微控制器通过串行接口与其它终端进行通信时,两个终端需要通讯波特率一致才能达到准确与可靠的通讯效果,串行波特率的自动检测(ABR)可以解决通信终端的波特率自动匹配问题,从而实现微控制器与PC或其它主 ...

最新文章

  1. 更换ubuntu软件源的方法
  2. [FFmpeg] ffmpeg 常用命令
  3. FileInputStreamTest
  4. 波音737-800座位图哪个好_「科普」汽车哪个座位才安全?很多人都不知道
  5. 边城高级中学2021届高考成绩查询,边城高级中学举行2021届高三学生成人礼暨高考誓师大会...
  6. c语言入门百度贴吧,c语言入门者
  7. java urlconnection乱码_HttpURLConnection 请求乱码
  8. Laravel向视图传递变量的两种方法
  9. 静态代理和动态代理的代码笔记
  10. 声道测试音频_AirPods Pro 空间音频的这7个问题,你都了解吗?
  11. python pip工具安装教程
  12. 最简单的python爬虫案例,适合入门学习
  13. 大信会计师事务所笔试题目_【上海大信会计师事务所面试|面试题】-看准网
  14. java树状结构递归与非递归实现,外加sql递归实现
  15. win10电脑如何隐藏下方任务栏
  16. su oracle 登录不了,Oracle中su切换进去sqlplus登录失败的问题处理
  17. matlab自带电机案例,MATLAB电机仿真精华50例,源代码
  18. 由13位数字组成的中国标准书号校验码计算实例
  19. 什么是RSS?如何订阅RSS?
  20. eclipse打断点无效,代码进不去断点,断点只是一个圆点,没有对勾的处理方案

热门文章

  1. cryptography
  2. Contest20140709 testA 树型DP
  3. 黑莓Z30评测–黑莓10中的均衡之作
  4. 三、数据特性计算(含信道通讯计算、码元速率计算、尼奎斯特定理、香农定理以及相应的练习题)——网络工程师成长之路
  5. Error LNK1120: 1 个无法解析的外部命令
  6. java运行背景_java程序更改背景
  7. 还没新上市华为鸿蒙os,搭载华为操作系统的新机或年内上市 华为自研操作系统是鸿蒙还是OS?...
  8. 人机测试计算机,人机测试
  9. 考试管理系统-刷题系统案题目选项编写
  10. 【图解算法】排序算法——快速排序