如何计算CAN通信波特率
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通信波特率相关推荐
- STC89C51 串口通信波特率设置
STC89C51 串口通信波特率设置 //9600T2L = 0xE0; //设定定时初值T2H = 0xFE; //设定定时初值//115200T2L = 0xE8; //设定定时初值T2H = 0 ...
- STM32F103 CAN通信波特率的计算方法
前言 最近看一下CAN通信,翻出来之前做过的STM32 CAN通信的项目代码,有些概念比较模糊了,如波特率是怎么计算的. 最近接触rt-thread比较多,想把之前的CAN通信的代码,移植到RTOS上 ...
- STM32-串口通信波特率计算以及寄存器的配置详解
串口通信基本原理 处理器与外部设备通信的两种方式 并行通信 传输原理:数据各个位同时传输. 优点:速度快 缺点:占用引脚资源多 串行通信 传输原理:数据按位顺序传输 优点:占用引脚资源少 缺点:速度相 ...
- STC15F2K60S2串口通信/波特率设置/通信初始化/发送(接收)一个数据教程
STC15F2K60S2串口通信 . . 一.先斩后奏,上代码!!!! 先强调:通常我们做单片机与单片机通信.单片机与PC通信.PC与PC串口通信,基本选择方式1的串口通信方式,下面的讲解中我会详细的 ...
- CAN通信波特率与每秒收发帧数
波特率: 上两图来自STM32F4XX中文参考手册 波特率与帧时间计算 上图片来自:点击打开链接 如何测量CAN总线的波特率? 点击打开链接
- 串口通信波特率数据错乱
如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf){case 0: P2_0=0;//unsigned char ...
- STC12C5A60S2串口通信(使用独立波特率发生器)
快速导航 STC12已封装好的函数库 使用STC12C5A60S2做串口通信波特率初始化可以使用STC-ISP波特率计算器自动生成 本Demo使用STC12独立波特率发生器,晶振11.0592,波特率 ...
- 波特率9600是什么意思 串口通信为什么要设置波特率
波特率9600是什么意思 波特率是一个电子信号上的术语,用于描述信道的数据传输速度.所谓信道,可以是无线的,也可以是有线的,说白了就是两个东西之间传输数据. 波特率通常单位是bit/s,也就是 二进制 ...
- 单片机c语言波特率检测,基于MSP430系列微控制器串口通信时的波特率自动检测的实现...
通常微控制器通过串行接口与其它终端进行通信时,两个终端需要通讯波特率一致才能达到准确与可靠的通讯效果,串行波特率的自动检测(ABR)可以解决通信终端的波特率自动匹配问题,从而实现微控制器与PC或其它主 ...
最新文章
- 更换ubuntu软件源的方法
- [FFmpeg] ffmpeg 常用命令
- FileInputStreamTest
- 波音737-800座位图哪个好_「科普」汽车哪个座位才安全?很多人都不知道
- 边城高级中学2021届高考成绩查询,边城高级中学举行2021届高三学生成人礼暨高考誓师大会...
- c语言入门百度贴吧,c语言入门者
- java urlconnection乱码_HttpURLConnection 请求乱码
- Laravel向视图传递变量的两种方法
- 静态代理和动态代理的代码笔记
- 声道测试音频_AirPods Pro 空间音频的这7个问题,你都了解吗?
- python pip工具安装教程
- 最简单的python爬虫案例,适合入门学习
- 大信会计师事务所笔试题目_【上海大信会计师事务所面试|面试题】-看准网
- java树状结构递归与非递归实现,外加sql递归实现
- win10电脑如何隐藏下方任务栏
- su oracle 登录不了,Oracle中su切换进去sqlplus登录失败的问题处理
- matlab自带电机案例,MATLAB电机仿真精华50例,源代码
- 由13位数字组成的中国标准书号校验码计算实例
- 什么是RSS?如何订阅RSS?
- eclipse打断点无效,代码进不去断点,断点只是一个圆点,没有对勾的处理方案
热门文章
- cryptography
- Contest20140709 testA 树型DP
- 黑莓Z30评测–黑莓10中的均衡之作
- 三、数据特性计算(含信道通讯计算、码元速率计算、尼奎斯特定理、香农定理以及相应的练习题)——网络工程师成长之路
- Error LNK1120: 1 个无法解析的外部命令
- java运行背景_java程序更改背景
- 还没新上市华为鸿蒙os,搭载华为操作系统的新机或年内上市 华为自研操作系统是鸿蒙还是OS?...
- 人机测试计算机,人机测试
- 考试管理系统-刷题系统案题目选项编写
- 【图解算法】排序算法——快速排序