當前位置:編程學習大全網 - 源碼下載 - linux can 怎麽設置波特率

linux 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

  • 上一篇:復變函數主要有什麽用?
  • 下一篇:Java招聘APP源代碼
  • copyright 2024編程學習大全網