始终可以使用CAN进行操作很简单,但是出了点问题(在KDPV上的设备中)...

最近,我经常设法使用STM32H750VB微控制器,在一个设备中我需要使用CAN总线,但是我所做的第一次尝试
显示出我所有的自信心都带来了奇怪的结果。 故事描述如下。
因此,首先是关于电路。 在KDPV上,它用绿色圈出,当然,罪魁祸首是微控制器,CAN并没有什么复杂的问题-它根据

MAX3051用作物理层(嗯,我喜欢它..),如下所示:

以前,STM32F107不在STM32H750VB中,而是在同一系统中,但这位老人无法应付这些任务,因此决定将其替换为更现代
,更
年轻的任务 。
但是,这是不幸的-旧的微控制器具有bxCAN,而新的微控制器已经具有FDCAN。 尽管存在差异,但是从代码的角度(和工作-总线上的设备很旧)来看:更换非常简单。 对于那些谁愿意,您可以比较:
一般来说,化妆品上的差异。 在我看来,它可以一次全部正确地工作。
但是,它并没有立即起作用...
CAN控制器无法设置主导级别并进入总线关闭状态,并且没有从总线接收任何数据(尽管总线上的另一个设备每秒稳定发送两次数据包)。
好吧,我以为,调试线来了,并焊接了CAN-RX和CAN-TX线上的配线(实际上,查看总线本身看起来很合逻辑-该设备处于静默状态,而所连接的其他设备
按约定发送了数据包)。
之后,首先打开FDCAN_MODE_BUS_MONITORING模式。 而且,瞧,我立即看到了公共汽车上的包裹! (在此模式下,CAN控制器仅侦听数据,但不传输任何数据)。 太好了...
接下来,打开FDCAN_MODE_EXTERNAL_LOOPBACK模式(相反,在此模式下,我们只听自己的声音,然后将所有内容传输到总线上)。 在CAN_RX和CAN_TX线上,所有数据包都出现了-既由设备本身发送,又从总线接收,此处
在下图中(来自微控制器的灰色数据TX,橙色数据线RX),它们显示为峰值:

因此,在进行了该实验后,很明显电路正常工作,微处理器中的CAN控制器可以接收和发送数据。
但是,当尝试同时接收和发送数据时,系统仍然变为总线关闭,并且错误控制寄存器(FDCAN协议状态寄存器(FDCAN_PSR))中出现错误LEC [2:0] = 5-这意味着从数据表中获取Bit0Error:消息的传输(或确认位或活动错误)
标志或过载标志),则设备希望发送显性级别(数据或标识符位)
逻辑值0),但监视的总线值是隐性...
经过两天的折磨(很清楚错误是什么,但不清楚如何解决),并对数据表,勘误表和大量第三方代码和手册进行了认真的研究,我的理解是
启迪 -我做对了一切,但是没有用!
好吧,我想,也许问题出在技术上,并且...替换了微控制器本身(用同一批中的另一个)。 而且...有效! 好吧,也就是说,这里没有麻烦
的小手鼓,没有源代码,而且应该是第一次。
简要总结
显然,发现了这样一个狡猾的标本。 但是另一方面,我设法深入研究了FDCAN的总体工作,这可以归因于优点。 并归因于缺点...归因于它们的浪费时间(控制器可以附加到另一个项目上),以及对现代控制器在现代方式下也具有
强大力量的越野车的理解(或者这也是一个优点吗?)。