單塊板子在接入can匯流排時沒有任何問題,但是多塊板子同時接入can時,基本只有一塊是可以用的,其他板子會卡死,起初認定是匯流排連線的問題,試過匯流排上接入120ohm電阻乙隻或兩隻,都沒有效果,通過keil使用jlink進入除錯模式發現程式卡死在startup_stm32f10x_md.s的下面位置,經老師指點此處應為stm32的中斷服務程式的入口位置,推測是can匯流排中斷沒處理好,老師問有沒有處理接收中斷,我說沒有寫can接收的中斷服務。
273 b .
275 endp
然後,將下面程式中的enable更改為disable則,程式可以執行了。
/*can fifo0 message pending interrupt enable */
can_itconfig(can1,can_it_fmp0,enable); //使能fifo0訊息**中斷
因此在多塊can匯流排開發板互聯時,要麼編寫can接收中斷的服務程式,要麼不要使能接收中斷,即不使能fifo0訊息**中斷,否則要加入類似如下的中斷服務程式
/* usb中斷和can接收中斷服務程式,usb跟can公用i/o,這裡只用到can的中斷。 */
void usb_lp_can1_rx0_irqhandler(void)
}
總結:個人覺得自己有點偏執,開始一直認為單個通訊正常,連在一起不正常是匯流排對外硬體配置的問題,沒有想到是程式配置問題,但是最終也大致提出了可能是can匯流排配置問題,但由於stm32 can匯流排沒有仔細學習,導致也沒有推測出問題。
stm32多塊開發板can匯流排互聯卡死問題
單塊板子在接入can匯流排時沒有任何問題,但是多塊板子同時接入can時,基本只有一塊是可以用的,其他板子會卡死,起初認定是匯流排連線的問題,試過匯流排上接入120ohm電阻乙隻或兩隻,都沒有效果,通過keil使用jlink進入除錯模式發現程式卡死在startup stm32f10x md.s的下面位...
STM32的CAN匯流排除錯
1.使用stm32的can匯流排,回環程式寫好之後,在無外接收發晶元的情況下,使程式不斷發資料,使用示波器可以看到tx引腳有波形,而rx引腳沒有波形 2.模式改為正常模式,在沒有接收發晶元的情況下再次測一下tx與rx的波形,但是發現使用示波器採集不到波形,而且在發了幾次資料後會進行標準庫的斷言,一直...
stm32內部的CAN匯流排
bxcan是基本擴充套件can basic extended can 的縮寫,它支援can協議2.0a和2.0b 它的設計目標是以最小的cpu負載來高效處理大量的報文。它也支援報文傳送的優先順序要求 優先順序可軟體配置 bxcan模組可以完全自動地接收和傳送can報文,且完全支援標準識別符號 11位...