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