关于STM32的CANFD IP设计的缺陷

近日在做STM32的CANFD开发,想处理CANFD错误帧相关的判断,即ISO11898-2016那一层的相关内容,发现STM32芯片CANFD IP有一定的缺陷。

我们知道CAN总线上要完整的收发,需要至少要有两个节点,A和B,因为B需要给A一个ACK信号。

现在我们配置A节点500K,B节点1M,那么势必会导致A/B进入错误,应该报错仲裁ID段阶段错误。经过调试发现A/B确实进入了。可是 你怎么知道A是由于发送导致的,B是由于接受导致的呢?实际上相关状态寄存器并没有说明是发送还是接收。

有一个PSR寄存器的ACT位,代表着是:同步/发送/接收/空闲, 我以为这个可以判断,可实际上进入CAN中断后,这个ACT位就变成了空闲。所以这个位并不能真正表示,“刚才发生的错误是本节点是发送还是接收"。 于是我想了个办法,开一个高级定时器,周期10ns,发现确实可以,不过不具有可行性,实在太占CPU了。占了我20%的CPU(-O0未开优化)。

综上,CANFD的 IP有一定设计上的缺陷,非BUG。

PS:STM32的基本CAN2.0A/B  是可以识别出是发送错误还是接受错误的。相关寄存器写的非常清楚。

你可能感兴趣的:(C++,单片机,stm32,单片机,arm)