如何 配置 CH32V307 CAN通讯波特率

开发板  CH32V307  CAN通讯波特率 例程 是 250K。

请问 如何 配置 成  500K, 和 1000K。

谢谢!

您好,关于CAN波特率的配置,可以参考下图

image.png


我们来算一下例程:

/* Bps = 250Kbps,pclk1 = 36Mhz */

can_hw_init(CAN_SJW_1tq/* 一般固定为1tq */, CAN_BS2_5tq, CAN_BS1_6tq, 12, CAN_Mode_Normal );

Tclk = 1/36m

分频:12(内部减了1,再加一就是参数值)

Tq = (brp[90]+1) * tpclk = 12/36=1/3m

T1bit = 1+6+7=14

bps = 1/(1/3m * 14) = 3/14=0.214m

这样比250差的比较远,算的对吗?



您好,有关CAN波特率计算的介绍可参考:https://www.cnblogs.com/wchmcu/p/17546797.html



这个例程,brp为啥是12?明明api会-1,是11啊。

微信截图_20230713091826.png


可以看一下官方寄存器手册对CAN BTIMR BRP[9:0]寄存器的描述。image.png

附手册链接:/downloads/CH32FV2x_V3xRM_PDF.html


所以说你那个公司 pclk/((bs1+bs2+1)*brp[9:0])

这个brp[9:0]到底指的是实际值,还是寄存器的值,看起来写法是指寄存器,如果是寄存器,那就是11,如果是实际值,那就是12。拜托你们不要公式写的是寄存器,实际又按实际值。这样搞死人了。


BRP[9:0]指寄存器的值,例程CAN_Mode_Init( u8 tsjw, u8 tbs2, u8 tbs1, u16 brp, u8 mode )传入的brp是12,BRP[9:0]的实际写入的值是11


我去,网址内容刚更新了,居然不承认我说的是对的,我说你这个12怎么出来的呢。



微信截图_20230713141548.png





只有登录才能回复,可以选择微信账号登录