手冊(cè)上對(duì)CAN 主狀態(tài)寄存器(CAN_STATR)bit9 RXM的定義為:接收模式查詢位:
1:當(dāng)前 CAN 控制器為接收模式;
0:當(dāng)前 CAN 控制器非接收模式。
這里“模式”實(shí)際上應(yīng)該理解為“狀態(tài)”,也就是只有CAN硬件在接收數(shù)據(jù)的時(shí)候才會(huì)置1,STM32和AT32實(shí)際都是這樣的,其中AT32的手冊(cè)寫得比較清晰:
當(dāng)前的接收狀態(tài)(Currently receiving status)
0:未接收;
1:正在接收。
注:在 CAN 開始接收時(shí)硬件置位此標(biāo)志,接收完畢后硬件自動(dòng)清除。
STM32的描述如下:
RXM: Receive mode
The CAN hardware is currently receiver.
它提到的是mode,直譯是模式,但是下面的解釋可以看出這里要表達(dá)的是接收狀態(tài)。
另外一些型號(hào)比如GD32,這一位實(shí)際實(shí)現(xiàn)就是“模式”,CAN初始化退出睡眠模式以后RS位就是1,無法正常指示硬件的接收“狀態(tài)”。
CAN的一幀很長(zhǎng),需要上百個(gè)位,持續(xù)數(shù)百微秒,硬件接收完了完整一幀才會(huì)放入FIFO,軟件才能查詢到,所以如果軟件想知道硬件是否在接收數(shù)據(jù),這個(gè)接收指示位就很重要。
我實(shí)際測(cè)試CH32V203的CAN初始化完成以后RXM位是0,因此應(yīng)該是和STM32/AT32一樣的,實(shí)現(xiàn)沒有問題,希望原廠能夠澄清一下,如果能修改一下文檔中的描述就更好了,避免歧義。