硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1474|回复: 4
收起左侧

[有问必答] stm32F4XX CAN总线参数CANBS1和BS2如何设置

[复制链接]

6

主题

10

回帖

28

积分

新手上路

积分
28
发表于 2021-12-14 11:19:56 | 显示全部楼层 |阅读模式
stm32F4XX CAN总线中的参数BS1和BS2的值是根据什么得到的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107661
QQ
发表于 2021-12-14 11:51:42 | 显示全部楼层

    /*
        CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
        
        SJW = synchronisation_jump_width
        BS = bit_segment
        
        设置CAN波特率为1 Mbps        
        CAN 波特率 = 42000000 / 2 / (1 + 12 + 8) / = 1 Mbps        
    */
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_12tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
    CAN_InitStructure.CAN_Prescaler = 2;
    CAN_Init(CAN1, &CAN_InitStructure);
回复

使用道具 举报

6

主题

10

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2021-12-14 12:03:16 | 显示全部楼层
eric2013 发表于 2021-12-14 11:51
/*
        CAN 波特率 = RCC_APB1Periph_CAN1 / Prescaler / (SJW + BS1 + BS2);
        

TS1[3:0]和TS2[2:0]只是在CAN_BTR寄存器中有位定义,但是具体值的话,是不是和具体开发版有关?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107661
QQ
发表于 2021-12-14 14:32:22 | 显示全部楼层
xhrain 发表于 2021-12-14 12:03
TS1[3:0]和TS2[2:0]只是在CAN_BTR寄存器中有位定义,但是具体值的话,是不是和具体开发版有关?

没关系,用到什么波特率配置即可。

回复

使用道具 举报

80

主题

722

回帖

962

积分

金牌会员

积分
962
发表于 2021-12-14 22:10:04 | 显示全部楼层
这两个值就是CAN标准位时许里面的相位缓冲段,当位出现偏移的时候用来做同步缓冲的。配置的时候除了考虑波特率就主要考虑同步的时候的问题。如果没有特殊要求就按照硬汉给的,我一直用的就是这个参数,暂时没出问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-11 09:08 , Processed in 0.225285 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表