[综合信息]

华大EVB板CAN通讯的问题

[复制链接]
2868|11
手机看帖
扫描二维码
随时随地手机跟帖
Cjy_JDxy|  楼主 | 2020-1-7 19:01 | 显示全部楼层 |阅读模式
我用华大EVB板做CAN通讯试验,用的例程是
can_rx_tx_irq
有一段代码不明白,如下:
static void App_CanInit(void)
{
    stc_can_init_config_t   stcCanInitCfg;
    stc_can_filter_t        stcFilter;


    Sysctrl_SetPeripheralGate(SysctrlPeripheralCan, TRUE);

    //<<CAN 波特率配置
    stcCanInitCfg.stcCanBt.PRESC = 1-1;
    stcCanInitCfg.stcCanBt.SEG_1 = 5-2;
    stcCanInitCfg.stcCanBt.SEG_2 = 3-1;
    stcCanInitCfg.stcCanBt.SJW   = 3-1;
               

       
    stcCanInitCfg.stcWarningLimit.CanErrorWarningLimitVal = 10;
    stcCanInitCfg.stcWarningLimit.CanWarningLimitVal = 16-1;

    stcCanInitCfg.enCanRxBufAll  = CanRxNormal;
    stcCanInitCfg.enCanRxBufMode = CanRxBufNotStored;
    stcCanInitCfg.enCanSTBMode   = CanSTBFifoMode;

    CAN_Init(&stcCanInitCfg);

    //<<CAN 滤波器配置
    stcFilter.enAcfFormat = CanAllFrames;
    stcFilter.enFilterSel = CanFilterSel1;
    stcFilter.u32CODE     = 0x00000352;
               
    stcFilter.u32MASK     = 0x1FFFFFFF;
    CAN_FilterConfig(&stcFilter, TRUE);


    //<<Can Irq Enable
    CAN_IrqCmd(CanRxIrqEn, TRUE);

    EnableNvic(CAN_IRQn, IrqLevel0, TRUE);

}

我有两个问题
1.例程里的波特率到底是多少?如何计算?
2.u32CODE=0x00000352是什么意思?谢谢!

使用特权

评论回复
评论
Cjy_JDxy 2020-1-8 09:54 回复TA
@Cjy_JDxy :那是库,跟CAN协议关系不大。而且数据手册说的很简单。大神来指点一下 
Cjy_JDxy 2020-1-8 09:00 回复TA
@eelux :用户手册没有CAN通讯的内容 
eelux 2020-1-8 08:50 回复TA
用户手册和CAN协议有看过么? 
Cjy_JDxy|  楼主 | 2020-1-8 08:57 | 显示全部楼层
我没仔细看

使用特权

评论回复
Cjy_JDxy|  楼主 | 2020-1-17 12:03 | 显示全部楼层
版主来说一下。谢谢!

使用特权

评论回复
lanzi668| | 2021-7-26 11:26 | 显示全部楼层
你好,波特率计算有理解了吗,我也看不明白是怎样计算的

使用特权

评论回复
fxyc87| | 2021-7-26 12:01 | 显示全部楼层

看代码不看手册,?

使用特权

评论回复
Cjy_JDxy|  楼主 | 2021-7-27 07:43 | 显示全部楼层
lanzi668 发表于 2021-7-26 11:26
你好,波特率计算有理解了吗,我也看不明白是怎样计算的

早就忘了,可以看手册

使用特权

评论回复
Cjy_JDxy|  楼主 | 2021-7-27 07:46 | 显示全部楼层
fxyc87 发表于 2021-7-26 12:01
看代码不看手册,?

我太懒了

使用特权

评论回复
liangzhou1988| | 2021-7-27 15:40 | 显示全部楼层
1.例程里的波特率到底是多少?如何计算?
2.u32CODE=0x00000352是什么意思?

1 例程里的波特率是1M。该例程使用8M的XTH时钟,CAN总线一个位的时间由SEG1和SEG2两个部分组成,根据程序配置,可知SEG1占据5个TQ时间片,SEG2占据3个TQ时间片;总计8个TQ时间片,因此波特率为1M;
2 .u32CODE=0x00000352和u32MASK = 0x1FFFFFFF一起组成筛选器屏蔽位模式;屏蔽位为1的位是必须匹配,为0的位可以不用关心。因此本例程除最高位的三个位(b31 b30 b29)可以不关心外,在接收模式中,其余29位必须严格匹配该标识符,否则CAN总线会拒收该消息。这个CODE就是个举例,没有什么含义。@Cjy_JDxy
CAN.png

使用特权

评论回复
Cjy_JDxy|  楼主 | 2021-7-27 17:43 | 显示全部楼层
liangzhou1988 发表于 2021-7-27 15:40
1.例程里的波特率到底是多少?如何计算?
2.u32CODE=0x00000352是什么意思?

谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3520

帖子

19

粉丝