【记录】STM32之bxCAN(包括CAN波特率参数快速设置)

1 篇文章 0 订阅
1 篇文章 0 订阅

目录

CAN是什么?

总线拓扑图

STM32  bxCAN主要特点

初学需要关注的重点


CAN是什么?

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议。

在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。

总线拓扑图

CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

一般,CPU和CAN Controller 合成在一起。收发器常用的型号是:Tja1050或82C250。

STM32  bxCAN主要特点

支持CAN协议2.0A和2.0B主动模式

波特率最高可达1兆位/秒(1M 距离50米;5K 距离 10公里)

支持时间触发通信功能

发送

3个发送缓冲区

发送报文的优先级特性可软件配置

记录发送SOF时刻的时间戳

接收

3级深度的2个接收缓冲区(FIFO)

可变的过滤器组:

——在互联型产品中CAN1和CAN2分享28个过滤器组

——其它STM32F103xx系列产品中有14个过滤器组

标识符列表

记录接收SOF时刻的时间戳

时间触发通信模式

禁止自动重传模式

16位自由运行定时器

可在最后2个数据字节发送时间戳管理

中断可屏蔽

过滤器组

STM32总共提供14个过滤器组来处理CAN 接收过问题,每个过器组包含两个32位存器CAN FXRO和CAN FXR1 组成,在设置为屏蔽位模式下,其中一个作为标识符寄存器,另一个作为屏蔽码寄存器。过滤器组中的每个过滤器,编号(叫做过滤器号)从0开始,到某个最大数值(这时最大值并非13,而是取决于14个过滤器组的模式和位宽的设置,当全部配置为位宽为16,且为标识符列表模式时,最大编号为14*4-1=55)。

过滤器的过滤模式

STM32提供两种过滤模式供用户设置:标识符屏蔽位模式和标识符列表模式。

过滤器的位宽

每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:

1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位。

2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位。

过滤器匹配序号

一旦收到的报文被存入FIFO,就可被应用程序访问。通常情况下,报文中的数据被拷贝到 SRAM 中;为了把数据拷贝到合适的位置,应用程序需要根据报文的标识符来辨别不同的数据。bxCAN 提供了过滤器匹配序号,以简化这一辨别过程。

根据过滤器优先级规则,过滤器匹配序号和报文一起,被存入邮箱中。因此每个收到的报文,都有与它相关联的过滤器匹配序号。

过滤器匹配序号可以通过下面两种方式来使用:

1.把过滤器匹配序号跟一系列所期望的值进行比较

2.把过滤器匹配序号当作一个索引来访问目标地址

对于标识符列表模式下的过滤器(非屏蔽方式的过滤器),软件不需要直接跟标识符进行比较。

对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进行比较即可。

过滤器优先级规则

根据过滤器的不同配置,有可能一个报文标识符能通过多个过滤器的过滤;在这种情况下,存放在接收邮箱中的过滤器匹配序号,根据下列优先级规则来确定:

1.位宽为32位的过滤器,优先级高于位宽为 16位的过滤器

2.对于位宽相同的过滤器,标识符列表模式的优先级高于屏蔽位模式

3.位宽和模式都相同的过滤器,优先级由过滤器号决定,过滤器号小的优先级高

初学需要关注的重点

1.隐性位与显性位

CAN总线为“隐性”(逻辑1)时,CAN_H和CAN_L的电平为2.5V(电位差为0V);

CAN总线为“显性”(逻辑0)时,CAN_H和CAN_L的电平分别是3.5V和1.5V(电位差为2V)

2.数据帧类型:

(1)标准数据帧

数据字段最多只能是8,CRC校验

CRC 即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和个系数仅为“0”和“1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

(2)扩展数据帧

(3)标准远程帧

(4)扩展远程帧

3.位时间特性

CAN总线上的所有器件都必须使用相同的比特率。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。

同步段(SYNC_SEG): 同步段为首段,用于同步CAN总线上的各个节点输入信号的跳变沿就发生在同步段,该段持续时间为1TQ。

时间段1(BS1):定义采样点的位置。其值可以编程为1到16个时间单元但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移

时间段2(BS2):定义发送点的位置。其值可以编程为1到8个时间单元但也可以被自动缩短以补偿相位的负向漂移

重新同步跳跃宽度(SJW)定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。

CAN波特率计算公式

CAN波特率=系统时钟/分频数/(1*tq+tBS1+tBS2)

其中:

tBS1=tq*(TS1[3:0]+1)

tBS2=tq*(TS2[2:0]+1)

tq=(BRP[9:0]+1)*tPCLK

这里tq表示1个时间单元

tPCLK=APB时钟的时间周期

BRP[9:0],TS1[3:0]和TS2[2:0]在CAN BTR寄存器中定义

总体配置保持

tBS1>=tBS2,tBS2>=1个CAN时钟周期,tBS2>=2tSJW

CAN波特率设置数据查询

CAN波特率

参数设置

5 KBPS

CAN_SJW=CAN_SJW_2tq;

CAN_BS1=CAN_BS1_6tq;

CAN_BS2=CAN_BS2_4tq;

CAN_Prescaler =600;

10 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =600;

20 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =300;

25 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler = 240;

40 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler = 150;

50 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =120;

62.5 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =96;

80 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =75;

100 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler = 60;

125 KBPS

CAN_SJW=CAN_SW_tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler = 48;

200 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =30;

250 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =24;

400 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_5tq;

CAN_BS2=CAN_BS2_3tq;

CAN_Prescaler =10;

500 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler = 12;

800 KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_5tq;

CAN_BS2=CAN_BS2_3tq;

CAN_Prescaler = 5;

1M KBPS

CAN_SJW=CAN_SJW_1tq;

CAN_BS1=CAN_BS1_3tq;

CAN_BS2=CAN_BS2_2tq;

CAN_Prescaler =6;

4.屏蔽滤波

(1)屏蔽位模式

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。

(2)标识符列表模式

为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器接收报文标识符的每一位都必须跟过滤器标识符相同。

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式

标识符屏蔽位模式:可过滤出一组标识符。此时,这样CAN_FXR中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FXR1中如果某一位为1则CAN_FXR0中相应的位必须与收到的顿的标志符中的相应位吻合才能通过过滤器:CAN_FR1中为0的位表示CAN_FxR0中的相应位可不必与收到的顿进行匹配。

标识符列表模式:可过滤出一个标识。此时CAN_FXR0和CAN_FXR1中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。

5.bxCAN工作模式

bxCAN有3个主要的工作模式:初始化、正常和睡眠模式。还包括:测试模式、静默模式、环回模式、环回静默模式。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32系列微控制器中,CAN总线的波特率配置参数常见为以下几种: 1. 常规模式:常规模式指的是CAN总线的波特率为1 Mbps。在常规模式下,需要配置一些关键参数包括时间段1和时间段2的长度以及同步跳转宽度。 2. 波特率分频模式:波特率分频模式是指将常规模式下的1 Mbps的波特率进一步分频,以实现更低的波特率。在波特率分频模式下,需要配置分频因子以及关键参数,如时间段1和时间段2的长度以及同步跳转宽度。 3. 自定义模式:除了常规模式和波特率分频模式外,STM32还提供了自定义模式,通过该模式,用户可以自己设置CAN波特率。在自定义模式下,需要设置BRP(位时间计数器预分频系数)以及关键参数,如时间段1和时间段2的长度以及同步跳转宽度。 以上是STM32常见的CAN波特率配置参数。在进行CAN通信时,波特率的选择应根据具体的应用场景和需求进行配置,以确保通信的稳定和可靠性。 ### 回答2: 对于STM32微控制器的CAN(控制器局域网)模块,常见的CAN波特率配置参数包括以下几种: 1. 波特率预分频器(CAN\_BRP):用于设置CAN总线的时钟预分频系数,范围为1到1024。该值决定了CAN总线的实际通信速率,计算方法为:实际通信速率 = CAN时钟频率 / ((BRP + 1) * (1 + BS1 + BS2)),其中BS1和BS2是CAN总线的时间段配置参数。 2. 时间段1配置参数(CAN\_BS1):用于设置CAN总线的时间段1的长度,范围为1到16个时间单位。时间段1定义了CAN总线位的传输时间。 3. 时间段2配置参数(CAN\_BS2):用于设置CAN总线的时间段2的长度,范围为1到8个时间单位。时间段2定义了CAN总线位的传输时间。 4. 重新同步跳跃宽度(CAN\_SJW):用于设置CAN总线的重新同步跳跃宽度,范围为1到4个时间单位。重新同步跳跃宽度是用于处理CAN总线上的时钟偏移和抖动的参数。 以上是常见的一些CAN波特率配置参数,根据系统的需求,可以根据具体的应用场景选择合适的参数值。在配置CAN波特率时,需要保证发送方和接收方的CAN模块的配置参数一致,以确保正常的通信。 ### 回答3: 在STM32微控制器上配置CAN总线的波特率时,常见的参数如下: 1. 分频系数(BRP):BRP决定了CAN时钟频率的分频倍数。它指定了每个时间单元内的时间长度,用于传输一个位。BRP的取值范围是1至1024。 2. 同步段时间长度(Time Seg1):Time Seg1指定了CAN总线传输的同步段的时间长度。它包括了同步跳转宽度(Sync Jump Width)和时间段1(Time Seg1)的长度。Time Seg1的取值范围是1至16。 3. 时间段2长度(Time Seg2):Time Seg2指定了CAN总线传输的时间段2的时间长度。它表示了之后数据采样的时间长度。Time Seg2的取值范围是1至8。 4. 时间触发采样点(Time Triggered Sampling):时间触发采样点指定了CAN总线在采样数据时应该将采样点设置的时间点。它有两个可选值:前置采样点和后置采样点。 5. 自动总线关闭(Automatic Bus-off Management):自动总线关闭的设置决定了当CAN节点进入总线关闭状态时,是否自动重启CAN节点。它有两个可选值:使能和禁用。 通过合理配置以上参数,可以实现不同的CAN波特率以满足不同的通信需求。在配置过程中,需要根据具体系统的要求和硬件性能进行调整,并进行适当的测试来验证通信的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值