手册上对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一样的,实现没有问题,希望原厂能够澄清一下,如果能修改一下文档中的描述就更好了,避免歧义。