Embedded 如何将STM32控制器的CAN波特率设置为500K

Embedded 如何将STM32控制器的CAN波特率设置为500K,embedded,stm32,can-bus,Embedded,Stm32,Can Bus,我试图在STM32446E-EVAL和我的电脑上的软件应用程序之间建立CAN(控制器局域网)通信。问题是,只要我尝试接收或发送一个字节,“主要错误位”其中一个寄存器中出现错误,我怀疑这与我在其他论坛上读到的波特率有关,但我在官方STM IDE中找不到任何选项来设置波特率……有人知道如何正确设置波特率吗 第一步:了解CAN时间量子是什么: 第二步:检查您的can时钟是什么:来自您的项目 第三步:将此值放入上面的页面 第四步:准备好你的价值观 第五步:适当的程序可以用step4值注册(如果使用HAL

我试图在STM32446E-EVAL和我的电脑上的软件应用程序之间建立CAN(控制器局域网)通信。问题是,只要我尝试接收或发送一个字节,“主要错误位”其中一个寄存器中出现错误,我怀疑这与我在其他论坛上读到的波特率有关,但我在官方STM IDE中找不到任何选项来设置波特率……有人知道如何正确设置波特率吗

第一步:了解CAN时间量子是什么:

第二步:检查您的can时钟是什么:来自您的项目

第三步:将此值放入上面的页面

第四步:准备好你的价值观

第五步:适当的程序可以用step4值注册(如果使用HAL,则可以注册结构成员)


第六步:庆祝成功。

我在做一个项目时遇到了类似的问题。我没有像你一样使用完全相同的电路板,但它仍然是STM32,我使用的是CubeMx IDE。您的项目中很可能有一个.ioc文件,在那里您有一个名为“参数设置”的字段,您将在其中找到更多字段。在我的例子中,我改变了预分频器和位时间量子1和2,如上面的答案所述。当然,这取决于您的特定电路板的配置,但在我的例子中,预分频器的“获胜组合”是8,量子数的“获胜组合”是6和5。我用示波器进行测量,直到我发现这些值是正确的。更改这3个参数应该可以做到这一点

从§30.7.7位定时:

重新安排: BRP=(FPCLK/(波特率x(TS1+TS2+3))-1

并非TS1和TS2的所有值都会导致上述公式的整数值,因此不会生成正确的波特率。此外,您必须考虑样本点-各种CAN应用协议具有特定的优选采样点建议,但在任何情况下都必须在50%到90%之间。以百分比表示的样本点为:

1-((TS2+1)/(TS2+TS1+3))x 100%

因此,关于TS1/TS2值有多种解决方案,但每种解决方案都提供了不同的采样点,因此您需要选择以下值:

  • 精确生成500Kbps(NBT=2微秒)
  • 在50%至90%范围内,具有尽可能接近首选值的采样点
  • 这可能不是直截了当的,在不了解您的FPCLK的情况下,不可能提供具体建议。我创建了一个电子表格,用它们各自的样本点生成所有有效的可能性

    FPCLK=42MHz的示例:

    基于上述情况,TS1=10、TS2=1、BRP=5将导致500Kbps的采样点为85.7%,接近CANopen建议的87.5%

    这些值与计算机上的值一致
    请注意,表中的值是寄存器值+1。

    PCLK的值是多少?您在CAN_BTR寄存器中将TS1、TS2和BRP设置为什么?那么这些值适用于哪个PCLK频率?我不确定推荐一种经验主义的方法,而不是真正理解正在发生的事情是否有帮助。您的数据得出的样本点为58.33%,这对于长途公共汽车运行来说可能有点低。