STM8S的can波特率设置

25 篇文章 1 订阅

1 位时间特性

为了掌握如何设置STM8/32 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标准。


简而言之,就是:

CAN波特率=APB1总线频率/(BRP分频器系数*(1+tBS1+tBS2))

该公式用代码中的变量来表示,就是

CAN总线的波特率=PCLK1/((CAN_SJW +CAN_BS1 +  CAN_BS2)*CAN_Prescaler)
比如外部晶振为8MHz,使用外部晶振的话,一般PCLK1也就是8MHz,设CAN_SJW=1,CAN_BS1=5,CAN_BS2=4,CAN_Prescaler=1,则设置的波特率即为8000/((1+4+5)*1)kbps=800kbps。

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

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

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

                                                                                         图2

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

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

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

uint8_t  CAN_Configuration(uint8_t  can_prescaler)
{
    CAN_InitTypeDef CAN_InitStructure;
    CAN_Filter_Type CAN_Filter_Structure;
    CLK_PeripheralClockConfig(CLK_PERIPHERAL_CAN, ENABLE);
    CAN_DeInit();

    CAN_InitStructure.CAN_MasterCtrl = CAN_MasterCtrl_AllDisabled;
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
    //CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
    CAN_InitStructure.CAN_SJW = CAN_SynJumpWidth_1TimeQuantum;//tSJW=1个tCAN时钟周期
    CAN_InitStructure.CAN_BS1 = CAN_BitSeg1_5TimeQuantum;//tBS1=5个tCAN时钟周期
    CAN_InitStructure.CAN_BS2 = CAN_BitSeg2_4TimeQuantum;//tBS2=4个tCAN时钟周期
    CAN_InitStructure.CAN_Prescaler =  can_prescaler;

    uint8_t ret = CAN_Init_Set(&CAN_InitStructure);//总体配置保持tBS1>=tBS2 tBS2>=1个CAN时钟周期  tBS2>=2tSJW
    if(ret == FAIL)
        return 1;


    CAN_Filter_Structure.FilterNumber = CAN_FilterNumber_0;
    CAN_Filter_Structure.FilterActivation = ENABLE;
    CAN_Filter_Structure.FilterMode = CAN_FilterMode_IdMask;
    CAN_Filter_Structure.FilterScale = CAN_FilterScale_32Bit;
    CAN_Filter_Structure.FilterID1=0;
    CAN_Filter_Structure.FilterID2=0;
    CAN_Filter_Structure.FilterID3=0;
    CAN_Filter_Structure.FilterID4=0;
    CAN_Filter_Structure.FilterIDMask1=0;
    CAN_Filter_Structure.FilterIDMask2=0;
    CAN_Filter_Structure.FilterIDMask3=0;
    CAN_Filter_Structure.FilterIDMask4=0;

    CAN_Filter_Init(&CAN_Filter_Structure);
    CAN_ITConfig(CAN_IT_FMP, ENABLE);
    return 0;
}


在晶振为16MHz的stm8s上运行如下语句:
CAN_Configuration(2);
则PCLK1也就是16MHz,CAN_SJW=1,CAN_BS1=5,CAN_BS2=4,CAN_Prescaler=2,则设置的波特率即为16000/((1+4+5)*2)kbps=800kbps。

一般在配置Can波特率时保持tBS1>=tBS2 ,tBS2>=1个CAN时钟周期 ,tBS2>=2tSJW。



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: stm32can波特率计算器是一款用于计算CAN总线的波特率的工具。它基于ST公司生产的STM32微控制器开发,并且具有精准和可靠的特点,在CAN总线应用领域有着广泛的应用。 在使用stm32can波特率计算器时,首先需要选择使用的STM32系列型号,然后输入所配置的系统时钟频率、预分频系数、时间段1和时间段2的长度,即可计算出相应的波特率。同时,该计算器还能够对所配置的参数进行校验,确保所计算的波特率符合CAN总线的要求。 使用stm32can波特率计算器可以有效地提高CAN总线的稳定性和可靠性,避免因波特率不匹配而导致的通信故障。此外,由于该工具基于STM32微控制器开发,因此它还具有其他扩展功能,例如可以集成到用户的应用程序中,实现更灵活的应用需求。 总之,stm32can波特率计算器是一款非常实用的工具,为CAN总线的应用开发提供了便利和安全的保证。 ### 回答2: STM32CAN波特率计算器是一款方便的工具,可以帮助开发人员计算CAN总线上通信速率的工具。在CAN总线应用中,波特率是非常重要的,对于CAN总线的性能和通信质量都有很大的影响。使用这个工具可以方便地计算出适合具体应用的波特率。 在使用该工具前,需要输入自己所使用的晶振频率和波特率,才能计算出CAN消息的帧率。可以根据用户输入的数据自动计算并显示需要的寄存器的值,以便用户可以直接用于CAN总线通信。因此,该工具不仅可以节省开发人员的时间,同时也可以极大地减少快速原型设计中的错误。 总体来说,STM32CAN波特率计算器是一个十分实用的工具,在进行CAN通信开发中起到了非常重要的作用。通过使用该工具,可以方便简单地计算出正确的波特率,从而实现更高效的CAN总线通信,提高开发效率和产品质量。 ### 回答3: STM32CAN波特率计算器是一种基于STMicroelectronics公司的STM32单片机的工具,用于计算CAN总线通信的波特率。在CAN总线通信中,波特率是指设定的数据传输速率,通常用位每秒(bps)或千位每秒(kbps)表示。波特率的正确设置对CAN总线通信的可靠性和稳定性至关重要。 STM32CAN波特率计算器可以帮助用户准确计算CAN总线通信的波特率,并提供一些实用的功能。用户只需输入所需的波特率、时钟频率等参数,工具即可自动计算出满足要求的最佳参数设置。此外,工具还可以根据所选的芯片型号和CAN总线标准自动生成预设参数,方便用户快速进行参数配置。 STM32CAN波特率计算器还具有一些高级功能,例如位定时计算、采样点计算等。这些功能可以帮助用户更精确地调整CAN总线通信的参数,以满足不同的应用需求。此外,工具还可以生成详细的报告,包括波特率计算结果、设置参数和建议等信息,方便用户参考和保存记录。 总之,STM32CAN波特率计算器是一种功能强大、易于使用的工具,可以帮助用户轻松计算CAN总线通信的波特率,并提供一些实用的功能和报告。无论是初学者还是专业领域的专家,都可以从中得到帮助和提高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值