`
jiagou
  • 浏览: 2524826 次
文章分类
社区版块
存档分类
最新评论

STM32之CAN---配置波特率

 
阅读更多

1 位时间特性

为了掌握如何设置STM32 CAN的波特率,首先我们得先了解一下位时间特性。

位时间特性逻辑通过采样来监视串行的CAN总线,并且通过跟帧起始位的边沿进行同步,及通过跟后面的边沿进行重新同步,来调整其采样点。
它的操作可以简单解释为,如下所述把名义上的每位的时间分为3段:

● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1 x tCAN)。
● 时间段1(BS1):定义采样点的位置。它包含CAN标准里的PROP_SEG和PHASE_SEG1。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。
● 时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。

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

● 有效跳变:被定义为,当bxCAN自己没有发送隐性位时,从显性位到隐性位的第1次转变。

如果在时间段1(BS1)而不是在同步段(SYNC_SEG)检测到有效跳变,那么BS1的时间就被延长最多SJW那么长,从而采样点被延迟了。相反如果在时间段2(BS2)而不是在SYNC_SEG检测到有效跳变,那么BS2的时间就被缩短最多SJW那么长,从而采样点被提前了。为了避免软件的编程错误,对位时间特性寄存器(CAN_BTR)的设置,只能在bxCAN处于初始化状态下进行。
注: 关于CAN位时间特性和重同步机制的详细信息,请参考ISO11898标准。

图1

特别注意上图下方的几个公式.可以得出的结论是:

CAN波特率=APB总线频率/BRP分频器/(1+tBS1+tBS2)

2 与CAN波特率有关的寄存器

CAN位时间特性寄存器 (CAN_BTR)

地址偏移量: 0x1C
复位值: 0x0123 0000
注: 当CAN处于初始化模式时,该寄存器只能由软件访问。

图2

位31 SILM: 静默模式(用于调试)
0: 正常状态;
1: 静默模式。
位30 LBKM: 环回模式(用于调试)
0: 禁止环回模式;
1: 允许环回模式。
位29:26 保留位,硬件强制为0。
位25:24 SJW[1:0]: 重新同步跳跃宽度
为了重新同步,该位域定义了CAN硬件在每位中可以延长或缩短多少个时间单元的上限。
tRJW = tCAN x (SJW[1:0] + 1)。
位23 保留位,硬件强制为0。
位22:20 TS2[2:0]: 时间段2
该位域定义了时间段2占用了多少个时间单元
tBS2 = tCAN x (TS2[2:0] + 1)。
位19:16 TS1[3:0]: 时间段1
该位域定义了时间段1占用了多少个时间单元
tBS1 = tCAN x (TS1[3:0] + 1)
位15:10 保留位,硬件强制其值为0。
位9:0 BRP[9:0]: 波特率分频器
该位域定义了时间单元(tq)的时间长度
tq = (BRP[9:0]+1) x tPCLK

3 如何在代码中配置波特率

配置波特率是在CAN模块初始化时配置,代码示例如下:

//CAN1 register init 
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);
	
//CAN cell init 
CAN_InitStructure.CAN_TTCM = DISABLE; 
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE; 
CAN_InitStructure.CAN_NART = DISABLE; 
CAN_InitStructure.CAN_RFLM = DISABLE; 
CAN_InitStructure.CAN_TXFP = ENABLE; 
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; 
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; 
CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; //tBS1=6个tCAN时钟周期
CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; //tBS2=8个tCAN时钟周期
CAN_InitStructure.CAN_Prescaler = 4; //ABP总线时钟时钟4分频
	
//CANbps= Fpclk/((BRP+1)*((Tseg1+1)+(Tseg2+1)+1)  
//所以这里CANbps=30000000/4/(8+6+1))=500k bps
//总体配置方向: Tseg1>=Tseg2  Tseg2>=tq; Tseg2>=2TSJW	
if (CAN_Init(CAN1,&CAN_InitStructure) == CANINITFAILED) 		
{
       return _ERROR;									                  
}
CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);//打开FMP0中断
总体配置保持tBS1>=tBS2 tBS2>=1个CAN时钟周期 tBS2>=2tSJW


分享到:
评论

相关推荐

    STM32 CAN波特率配置表

    STM32 CAN波特率配置表是常用波特率配置时,各个参数的取值,非常方便。文件是压缩包,内部以图片格式保存的配置表。

    STM32 CAN学习

    STM32之CAN ---CAN ID过滤器分析.mht STM32之CAN---TTCAN模式浅析.mht STM32之CAN---中断管理浅析.mht STM32之CAN---发送管理分析.mht ...STM32之CAN---配置波特率.mht STM32之CAN---错误管理分析.mht

    STM32_CAN波特率及对应配置的计算器.rar

    这是一个用于计算STM32单片机CAN模块的波特率的计算工具,其中可以很方便的计算各种主频下波特率的配置方案。

    电子-STM32CAN常用波特率表.pdf

    电子-STM32CAN常用波特率表.pdf,单片机/嵌入式STM32-F0/F1/F2

    7、STM32 CAN通信 波特率设置指南1

    STM32 的 CAN 波特率计算STM32 里的 CAN 支持 2.0A,2.0B, 带有 FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN 挂接

    STM32H750的FDCAN配置

    STM32H750的FDCAN配置,配置为传统CAN,波特率500K,文章见我的博客。电路末端需要增加120欧的终端电阻,原文路径https://blog.csdn.net/13011803189/article/details/123839036

    STM32G474 FDCAN的经典CAN使用

    STM32G474 FDCAN的经典CAN使用 波特率250k 接收滤波0x207 0x607 0x601 0.5s发送一次数据 发送内容: ID:0x222 数据帧 标准帧 数据长度8 内容 78 56 34 12 00 00 00 00 接收数据以中断形势接收,存放到buffer中

    STM32_CAN波特率计算小程序(带QT源码)

    根据特定的波特率、采样点以及允许的错误率计算得出以下参数的值: CAN_InitStructure.CAN_BS1=CAN_BS1_9tq; CAN_InitStructure.CAN_BS2=CAN_BS2_6tq; CAN_InitStructure.CAN_Prescaler=5;

    GD32、STM32串口波特率计算器 USART误差计算器 预分频计算器

    编写了一个计算器,有兴趣的朋友可以试试。可以计算串口通信USART、UART的波特率,通信误差,预分频系数等。不同晶振频率对于串口通信的影响。 UART通信的配置。 参数计算。 码率和误差计算。

    HAL库-STM32F407-CAN通信-过滤器配置实验-程序源码

    实验内容:MCU芯片为STM32F407VET6,实现CAN通信过滤器配置实验。 CAN通信波特率为 500K bps,将接收到的CAN_ID发送出来,发送帧ID为0x18888888,前4个字节数据为接收到的CAN_ID。

    STM32H750VBT6 CAN通信收发

    CubeMAX配置引脚功能。 CAN通信设置为传统正常模式,波特率为1Mbps。 芯片: STM32H750VBT6 功能介绍: 1、按一次按键发送一则CAN报文 2、接收CAN报文并通过串口打印

    CAN波特率与传输距离的关系_CAN总线波特率_can波特率距离_

    CAN STM32波特率配置关系 说明资料

    STM32CANTEST

    stm32 can配置开发的模板配置了各种波特率

    STM 32 CAN总线应用

    (4)请将串口线(直连串口线)插在板子COM1口上,并打开超级终端或串口助手,配置波特率115200,8位,一个停止位,无校验位。 (5)HEX文件下载到板子后,LED灯闪烁,使用超级终端或串口调试助手可以看到按键调试信息,表明...

    CAN波特率计算小助手及源码下载

    内容概要:通过预设总线时钟与目标波特率,计算CAN总线ts1,ts2,brp值。可筛选符合预设采样率的参数配置组合。包含py源码 适合人群:STM32库函数HAL库相关参数设置计算。学习pyqt5编程入门。 形式:Windows可执行...

    STM32_内核外设_CAN

    CAN构成STM32F1内核外设CAN的构成CAN的数据帧图示讲解控制/状态配置寄存器CAN_MCR寄存器CAN_BTR测试模式讲解位时序及波特率发送邮箱发送报文的流程寄存器接收FIFO验收筛选器筛选器分类按长度分类按模式分类标识符...

    STM32F10xxx参考手册

    STM32F10xxx rev7v3参考手册. 南京万利提供的原始翻译文档. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时注意在ST网站下载更新版本. 本译文仅供参考,如有翻译错误,请以英文原稿为准。请读者随时...

    基于STM32的多源数据采集板卡设计

    经测试表明,全负荷工作时,所有数据通道均处于良好的工作状态,各端口能够按约定波特率以最大数据更新速率同步收发数据。此外,板卡各接口模块均进行电器隔离,数据传输稳定可靠,满足设备长时间加电工作的要求。

    CAN协议详细说明,详细介绍控制器区域网络(CAN原理,深入理解CAN网络的运行机制含代码.rar

    1.1 CAN 协议简介 1 1.2 CAN 物理层 2 1.3 CAN 协议层 8 2.1 CAN 控制内核 16 ...1.Normal模式测试500K 波特率(定时发送,轮询接收) 35 1.1 CubeMx配置 35 1.4 编写发送函数 36 1.5 编写轮询接收函数 38

Global site tag (gtag.js) - Google Analytics