TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C123 CAN模块波特率设置问题

请问哪位大侠用过TM4C123 的CAN接口,它的波特率设置我看有两个函数:

CANBitTimingSet
CANBitRateSet这两个函数都可以设置吗?

我的SysCtlClockGet()得到的时钟为20M,芯片为TM4C123GH6PZ. 期望设置的CAN波特率为800K。

如果是CANBitTimingSet,那4个数都怎么配啊,实在没找到详细的说明。

如果是CANBitRateSet ,SourceClock是写SysCtlClockGet()得到的20M还是写固定的8M?

热切期待大侠的解答,很捉急!!!

Butterfly:

CANBitTimingSet寄存器计算参考Excel工具 http://www.ti.com/lit/zip/sprac35.

http://www.ti.com/lit/an/sprac35/sprac35.pdf

user3763629:

回复 Butterfly:

真是太感谢了,那这两个函数有什么区别呢?

是不是

CANBitRateSet (CAN0_BASE, SysCtlClockGet(), 800000);

也能得到800k的波特率呢?

Butterfly:

回复 user3763629:

Bit rates最高可以设到1 Mbps,速率越高,距离越近

user3763629:

回复 Butterfly:

那我这样写程序可以吗?是控制一个电机,为CAN2.0B,我对照着它的要求把MsgID填好了,不知道这个是不是这样填写。它的格式见图。

void CanInit(void){ uint32_t RATE; CANInit(CAN0_BASE); RATE = CANBitRateSet(CAN0_BASE,SysCtlClockGet(),800000);   //RATE可以返回800000; //CANBitTimingSet(CAN0_BASE, &CANBitClk); CANEnable(CAN0_BASE);}

void speed_ctrl(void){ //SPD100 unsigned char spd100[4]={0x64,0x00,0x00,0x00}; sMsgObjectTx.ui32MsgID = 0x05080007; sMsgObjectTx.ui32Flags = MSG_OBJ_NO_FLAGS; //???? sMsgObjectTx.ui32MsgLen = 4; sMsgObjectTx.pui8MsgData = spd100; //100 CANMessageSet(CAN0_BASE,1,&sMsgObjectTx,MSG_OBJ_TYPE_TX); SysCtlDelay(10* (TheSysClock/3000));

sMsgObjectTx.ui32MsgID = 0x05080001; sMsgObjectTx.ui32Flags = MSG_OBJ_NO_FLAGS; //???? sMsgObjectTx.ui32MsgLen = 0; CANMessageSet(CAN0_BASE,1,&sMsgObjectTx,MSG_OBJ_TYPE_TX);}

它的格式见图:我按照要求算好了SID和EID,填入MsgID 后分别为0x05080007和0x05080001;数据长度分别为4和0,数据内容无误,

它要求扩展桢 IDE=1; 远程发送请求 RTR = 0;替代远程请求 SRTR = 0;我把sMsgObjectTx.ui32Flags = MSG_OBJ_NO_FLAGS; 

只是想先发两条指令下去,没有设置中断什么的。

上面程序有什么问题吗?

user3763629:

回复 Butterfly:

还有一个问题,CAN模块的时钟频率是怎么得到的,和SysCtlClockGet()是一样吗?

xyz549040622:

回复 user3763629:

看芯片的时钟树,没有对CAN的时钟进行单独的说明,那么CAN是挂在系统的APB总线上的,CAN的时候就是系统APB总线的时钟。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C123 CAN模块波特率设置问题
分享到: 更多 (0)