linux can 怎么设置波特率

作者&投稿:荡成 (若有异议请与网页底部的电邮联系)
linux can 怎么设置波特率~

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


位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

在can的配置里面有这么几个变量的赋值直接关系到can的波特率:
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;
CAN_InitStructure.CAN_Prescaler=5;
can波特率=36M/(CAN_SJW+CAN_BS1+CAN_BS2)/CAN_Prescaler

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


双柏县13434273779: socket can编程怎么没看到设置CAN的波特率的操作 -
轩馨英佰: 设备管理器----端口----通讯端口------属性------端口设置----每秒位数 或者开始 >> 所有程序 >> 附件 >> 通讯 >> 超级终端 二.设置超级终端 1. 新建连接: 备注:连接“名称”可任意 2. 选择端口:

双柏县13434273779: 如何准确的设置CAN总线的波特率,保证通信的稳定性 -
轩馨英佰: 我来回答你吧同一个网路内的节点是通过CAN总线直接通讯,他们的速率必须一致,因为不同速率下的位时间宽度、时间份额都是不一样的,通俗点讲速率不同,A节点认为的一个位,在B节点看来就不是一个位了,这样如何通讯?不同网络,应该是根据其速率区分的,CAN总线根据速率还能分为高速CAN和低速CAN,不同速率网络之间需要通过网关来通讯.

双柏县13434273779: 怎样进行CAN波特率计算.txt -
轩馨英佰: 在can的配置里面有这么几个变量的赋值直接关系到can的波特率: CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;CAN_InitStructure.CAN_Prescaler=5; can波特率=36M/(CAN_SJW+CAN_BS1+CAN_BS2)/CAN_Prescaler

双柏县13434273779: 20M晶振怎样设置CAN波特率为250K -
轩馨英佰: 波特率=SYSCLK/(BRPxBIT_time)SYSCLK是CAN模块的系统时钟频率,与CPU的时钟频率相同.BRP是BRPreg+1(BTC.23~16)的二进制值.Bit_time(位时间)定义如下:Bit_time=(TSEG1reg+1)+(TSEG1reg+1)+1

双柏县13434273779: linux 怎么查看串口波特率 -
轩馨英佰: cd /proc/tty/driver cat serial

双柏县13434273779: linux 串口设置怎么设置才算完善?
轩馨英佰: 设置波特率,校验位之类的,如果你要代码,我可以给你,有什么困难及时跟我联系、

双柏县13434273779: CAN总线 波特率设置100Kbps时就不能通讯了 低一点才可以 有什么原因造成呢? -
轩馨英佰: 给出的信息太少. 1. 什么控制器?晶振用的多少?位定时是如何设置的? 2. 用的什么收发器?是否有斜率抑制? 3. 是否电气隔离?耦合收发器的最高速率是多少?驱动参数是否合适? 4. 外围是否有高容性保护器件? 5. 什么线缆连接?线路两个末端是否有120Ω终端电阻?

双柏县13434273779: 怎么设置串口波特率为12800 -
轩馨英佰: 设备管理器----端口----通讯端口------属性------端口设置----每秒位数

双柏县13434273779: 新手,嵌入式linux,CAN 驱动有关问题,怎么产生can0等设备 -
轩馨英佰: 测试can需要ip,can-utils和libsocketcan库.通过ip工具配置can,如速率,启用和禁用can等.不能用buildroot编译出来的ip,需要重新编译.

双柏县13434273779: 无线串口通讯如何设置波特率 -
轩馨英佰: 一、指令模式的进入 第一种进入方式——正常使用(已经上电)中,把第5 引脚“SET”置低电平; 第二种进入方式——断电, 引脚“SET”引脚先置低电平再重新上电. 这两种方式都能使模块进入AT指令模式,释放(“SET”引脚不接低电...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网