stm32的can總線的配置如下:
can_initstructure.can_ttcm=disable;//禁止時間觸發通信模式
can_initstructure.can_abom=disable;
can_initstructure.can_awum=disable;
can_initstructure.can_nart=disable;//can封包隻被發送1次,不管發送的結果如何(成功、出錯或仲裁丢失)
can_initstructure.can_rflm=disable;
can_initstructure.can_txfp=disable;
can_initstructure.can_mode=can_mode_normal;
//can_mode_loopback
//can_mode_normal
can_initstructure.can_sjw=can_sjw_1tq;
can_initstructure.can_bs1=can_bs1_5tq;//1--16
can_initstructure.can_bs2=can_bs2_2tq;//1--8
can_initstructure.can_prescaler=2;
can_init(&can_initstructure);
/* can filter init
*/
can_filterinitstructure.can_filternumber=0;//選擇過濾器0
can_filterinitstructure.can_filtermode=can_filtermode_idmask;//指定過濾器被設定為辨別符屏蔽模式
can_filterinitstructure.can_filterscale=can_filterscale_32bit;//給出過濾器位寬為32位
下面根據設定的參數不同來決定can總線can總線的配置情況:
1、對擴充資料幀進行過濾:(隻接收擴充資料幀)
can_filterinitstructure.can_filteridhigh =
(((u32)slave_id<<3)&0xffff0000)>>16;
can_filterinitstructure.can_filteridlow =
(((u32)slave_id<<3)|can_id_ext|can_rtr_data)&0xffff;
can_filterinitstructure.can_filtermaskidhigh =
0xffff;
can_filterinitstructure.can_filtermaskidlow =
(注:标準幀資料幀、标準遠端幀和擴充遠端幀均被過濾)
2、對擴充遠端幀過濾:(隻接收擴充遠端幀)
(((u32)slave_id<<3)|can_id_ext|can_rtr_remote)&0xffff;
can_filterinitstructure.can_filtermaskidlow = 0xffff;
3、對标準遠端幀過濾:(隻接收标準遠端幀)
(((u32)slave_id<<21)&0xffff0000)>>16;
(((u32)slave_id<<21)|can_id_std|can_rtr_remote)&0xffff;
4、對标準資料幀過濾:(隻接收标準資料幀)
(((u32)slave_id<<21)|can_id_std|can_rtr_data)&0xffff;
5、對擴充幀進行過濾:(擴充幀不會被過濾掉)
(((u32)slave_id<<3)|can_id_ext)&0xffff;
can_filterinitstructure.can_filtermaskidlow = 0xfffc;
6、對标準幀進行過濾:(标準幀不會被過濾掉)
(((u32)slave_id<<21)|can_id_std)&0xffff;
注:slave_id為要過濾的id号。