python脚本计算STM32的bxCAN的波特率

CAN波特率的计算公式:

baudRate = pClk / (brp[9:0]+1)/(1+(ts1[3:0]+1)+(ts2[2:0]+1))

采样点 = (1+ts1[3:0]+1) / (1+ts1[3:0]+1+ts2[2:0]+1)

需要满足的条件:
tBS1 >= tBS2
tBS2 >= tq
tBS2 >= 2*tSJW

采样点需要满足的条件:

波特率             采样点
<= 500K           87.5%
> 500K            80%
> 800K            75%

'''
  计算当前频率下的所有配置的波特率
  
  配置需要满足的条件:
  1. tBS1 >= tBS2  
     tBS2 >= tq
     tBS2 >= 2*tSJW
      
  2. 采样点
  采样点需要满足的条件:
  <= 500K           87.5%
  > 500K            80%
  > 800K            75%
  
  采样点的计算方式:
  smp = (1+TS1)/(1+TS1+TS2)
'''

RST = {
    'brp': [],
    'pClk': [],
    'ts1': [],
    'ts2': [],
    'baudRate': [],
    'sam': []
}


def calc(pClk):
    for brp in range(1024):
        for ts1 in range(16):
            for ts2 in range(8):
                baudRate = pClk / (brp+1) / (1+(ts1+1)+(ts2+1))

                sam = (2 + ts1) / (3 + ts1 + ts2)

                RST['brp'].append(brp)
                RST['ts1'].append(ts1)
                RST['ts2'].append(ts2)

                RST['baudRate'].append(baudRate)
                RST['sam'].append(sam)


def findTargetBaudRate(tarBaud):
    for i in range(len(RST['baudRate'])):
        # 筛选目标波特率的配置
        if (tarBaud > RST['baudRate'][i] - 1) and (tarBaud < RST['baudRate'][i] + 1):

            # 根据目标波特率筛选合适的配置
            ''' tBS1 >= tBS2  
                tBS2 >= tq
                tBS2 >= 2*tSJW
            '''
            if (RST['ts1'][i] >= RST['ts2'][i]) and (RST['ts2'][i] >= 1):

                if (RST['sam'][i] > 0.740) and (RST['sam'][i] < 0.88):
                    print("%d, %d, %d, %f, %f" %
                          (RST['brp'][i], RST['ts1'][i], RST['ts2'][i], RST['baudRate'][i], RST['sam'][i]))


if __name__ == "__main__":
    pClk = float(input("请输入当前的Pclk(Hz), eg: 1000000 为1MHz. :"))
    targetBaudRate = float(input('请输入想要得到的目标波特率(Hz):'))
    calc(pClk)
    print("brp[9:0], ts1[3:0], ts2[2:0], baudRate, sample")
    findTargetBaudRate(targetBaudRate)

注意:这里最终的结果为:
1. 计算出的值均为寄存器的原始值,具体是标准库或HAL库中的哪个宏,请自行匹配。。。。。。
2. 计算出的多个匹配的参数,请自行根据采样点进行选择,程序中仅输出了74%–88%的匹配值

drawing
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Berte_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值