一、背景客戶要了一塊單路CAN的板子,他希望在沒有其他板子的情況下進行自行測試,然后按照我寫的APP選擇自收發(fā)測試選項,卻無法接收到發(fā)送的信息,但是外接了一塊板子就可以接收到自己發(fā)送的信息;由于開發(fā)時間久遠,之前又沒做記錄,所以一時間沒有解釋出個子丑寅卯來,慚愧?,F(xiàn)在重新查看資料,便有了此文。二、正文LPC1769有"Gloableselftest(全局自測試)"和"Localselftest(本地自測試)"兩種測試模式:-->"Gloableselftest(全局自測試)",連接模式如下圖:
如上圖所示,這種測試模式需要總線上有節(jié)點進行應答,即發(fā)送數(shù)據(jù)成功后,它才會把剛剛發(fā)送出去的數(shù)據(jù)接收進來,若是接收中斷被使能,則會和收到正常的CAN數(shù)據(jù)一樣,產(chǎn)生接收中斷,提醒CPU來讀數(shù)據(jù)。當然,相應的濾波設置要做好,具體設置方法,就是在發(fā)送的時候,"CANxCMR"寄存器不再置位"TR"位,來提醒CAN控制器發(fā)送數(shù)據(jù),而是置位"SRR"位來提醒CAN控制器發(fā)送數(shù)據(jù)。-->"Localselftest(本地自測試)",連接模式如下圖:
如上圖所示,這種測試模式是不需要總線上有節(jié)點進行應答的,只要發(fā)送出去,CAN控制器不去理會總線上是否有節(jié)點收到信息,而是直接將發(fā)送的數(shù)據(jù)取回來放到接收buffer內(nèi)。注意:由于不需要節(jié)點響應,所以必須要將CANhigh與CANlow的線通過一個終端匹配電阻給連接起來。具體設置方法,比"全局自測試"多一個步驟,即在CAN控制器進入復位模式后,將"CANxMod"寄存器的"STM"置位,然后按照"全局自測試"發(fā)送方法發(fā)送數(shù)據(jù),就可以實現(xiàn)自收自發(fā)了。至此,記錄完畢。