手册上对CAN 主状态寄存器(CAN_STATR)bit9 RXM的定义为:接收模式查询位:

1:当前 CAN 控制器为接收模式;

0:当前 CAN 控制器非接收模式。

这里“模式”实际上应该理解为“状态”,也就是只有CAN硬件在接收数据的时候才会置1,STM32和AT32实际都是这样的,其中AT32的手册写得比较清晰:

当前的接收状态(Currently receiving status)

0:未接收;

1:正在接收。

注:在 CAN 开始接收时硬件置位此标志,接收完毕后硬件自动清除。

STM32的描述如下:

RXM: Receive mode

The CAN hardware is currently receiver.

它提到的是mode,直译是模式,但是下面的解释可以看出这里要表达的是接收状态。

另外一些型号比如GD32,这一位实际实现就是“模式”,CAN初始化退出睡眠模式以后RS位就是1,无法正常指示硬件的接收“状态”。

CAN的一帧很长,需要上百个位,持续数百微秒,硬件接收完了完整一帧才会放入FIFO,软件才能查询到,所以如果软件想知道硬件是否在接收数据,这个接收指示位就很重要。

我实际测试CH32V203的CAN初始化完成以后RXM位是0,因此应该是和STM32/AT32一样的,实现没有问题,希望原厂能够澄清一下,如果能修改一下文档中的描述就更好了,避免歧义。