如何更改与 CAPL 的 CAN 总线通信的波特率?
解决办法
通常我们常见的配置方法主要有两种方法可以使用 CAPL 更改波特率,使用函数 setBtr或使用 canSetConfiguration、canFdSetConfiguration。
1. setBtr(long channel, byte btr0, byte btr1)
setBtr仅适用于 CAN,不适用于 CAN FD。该函数的参数是 CAN 通道号和两个总线时序寄存器:BTR0 和 BTR1。根据使用的 CAN 控制器,它们采用不同的值来确定波特率、采样点、采样数和同步跳转宽度,不过该函数无法直接配置波特率。
该函数的参数的获取方法我们可以通过Network Hardware Configuration配置获取需要的参数,打开方法如下图:
在功能区中转到 Hardware并选择按钮Network Hardware。网络硬件配置打开。选择所需的 CAN 通道并单击“setup”。如果您更改波特率 您可以在下表中看到两个 BTR 的所有有效值。现在您可以在列出的组合中选择 BTR 值作为函数的输入。
setBtr
注意:请确保在使用 CAPL 函数调用函数后执行 CAN 控制器的重置resetCAN().
2. canSetConfiguration(long channel, canSettings setting)
canFdSetConfiguration(long channel, canSettings abrSettings, canSettings dbrSettings)
函数canSetConfiguration和canFdSetConfiguration分别适用于CAN和CANFD,这2个函数可以直接配置波特率;它们的功能与函数setBtr一样,在设置波特率的时候我们一定要确定当前被测件和CANoe通道可以配置的参数值;并且在修改波特率的时候一定要与其他参数一起设置,否则可能设置的波特率无效,这里需要参考CANSetting结构体,具体如下:波特率
baudrate:
波特率tseg1
和tseg2
:时间片中时间段1和2的长度sjw
:时间量子中的同步跳跃宽度sam
:采样点数(1或3)flags
canGetConfiguration:
bit 0、bit 1:0,未知传输模式;1,低速;2:单线;3,高速
bit 8:0x100,该通道被配置为高速CAN
All other:保留值
canSetConfiguration:
bit 0:0,正常模式;1,静默模式(确认未创建)
All Other:保留值全部设置为0
函数canSetConfiguration和canFdSetConfiguration虽然大部分参数都是一致的,不过还是有一定的差异,下面我们一起来看下。
CAN:
CAN相关的参数我们可以通过Network Hardware Configuration去查看并获取相关的参数;包含波特率、tseg1和tesg2可以在下图中看到,并且可以通过每个部分的时间份额获得,下面示例中,tseg1 = 5和tseg2 = 2,,此处flags的值设置为0(正常模式)。
CANFD:
在输入字段中输入所需的波特率。单击三个点时,将打开位时序配置(右侧)的 对话框。tseg1、
tseg2
和sjw
。采样点数始终1
用于 CAN FD。此处flags的值设置为0(正常模式)。
注意:使用这些函数设置值后,CAN 控制器会自动复位。
重要说明:
- 更改波特率后,应验证正确的值。这可以使用函数
canGetConfiguration
和来完成canFdGetConfigurations
。 - 总线配置的更改仅在运行时发生。停止测量后, “网络硬件配置”对话框中看不到任何变化 。重新开始测量时,将再次获取此对话框中的值。