參考**:
/* enabling interrupt */
nvic_initstructure.nvic_irqchannel = can1_rx0_irqn;;
nvic_initstructure.nvic_irqchannelpreemptionpriority = 3;
nvic_initstructure.nvic_irqchannelsubpriority = 2;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init(&nvic_initstructure);
can_deinit(can1);//can 反初始化
can_structinit(&can_initstructure);
/* can cell init */
can_initstructure.can_ttcm=disable; //時間觸發模式
can_initstructure.can_abom=disable; //自動離線管理
can_initstructure.can_awum=disable; //自動喚醒模式
can_initstructure.can_nart=disable; //非自動重傳模式
can_initstructure.can_rflm=disable; //接收fifo鎖定模式
can_initstructure.can_txfp=disable; //傳送fifo優先順序
can_initstructure.can_mode=can_mode_normal; //can設定為正常模式
can_initstructure.can_sjw=can_sjw_1tq; //重新同步跳躍寬度1個時間單位
can_initstructure.can_bs1=can_bs1_3tq; //時間段1為3個時間單位
can_initstructure.can_bs2=can_bs2_2tq; //時間段2為2個時間單位
can_initstructure.can_prescaler=60; //時間長度為60
can_init(can1,&can_initstructure); //波特率72/2/(60(1+3+2))=0.1 即波特率為100kbps
//apb1操作速度限於36mhz, apb2操作於全速(最高72mhz)
//過濾器不過濾任何郵箱id
can_filterinitstructure.can_filternumber=0;
can_filterinitstructure.can_filtermode=can_filtermode_idmask; //掩碼模式
can_filterinitstructure.can_filterscale=can_filterscale_32bit;
can_filterinitstructure.can_filteridhigh=0x0000; //要過濾的id高位
can_filterinitstructure.can_filteridlow= can_id_ext|can_rtr_data; //要過濾的id低位
can_filterinitstructure.can_filtermaskidhigh=0x0000; //過濾器遮蔽識別符號高16位值
can_filterinitstructure.can_filtermaskidlow=0x0000; //過濾器遮蔽識別符號低16位值
can_filterinitstructure.can_filterfifoassignment=can_fifo0; //設定指向過濾器的fifo為0
can_filterinitstructure.can_filteractivation=enable; //使能過濾器
can_filterinit(&can_filterinitstructure); //初始化過濾器
/* can fifo0 message pending interrupt enable */
can_itconfig(can1,can_it_fmp0, enable); //使能fifo訊息**中斷
can_itconfig(can1,can_it_tme,enable); //傳送中斷使能
uint8_t can_sendmsg(can_typedef* canx, uint8_t iddata ,uint8_t* data,uint8_t size)
//can1中斷
void
can1_rx0_irqhandler
(void
)
stm32f042除錯Can心得
這兩天玩了一下stm32f042的can,但是折騰了2個晚上,還是沒有進展。我知道stm32f042f6p6 ssop20封裝的pin17,pin18預設是pa9,pa10的功能,如果想使用pa11和pa12,需要進行埠對映。這樣的話,我直接就用了下面的 進行埠對映,syscfg memoryrem...
STM32F107的時鐘設定
stm32f107 的時鐘設定 stm32 的庫函式好像只有外部 8m倍頻到 72m,現在用的板子外部 25m的晶振,如何倍頻到 72m呢?解決辦法 stm32f107 的時鐘分 4步的 1 25mhz先除5 分頻到5mhz 2 再8 倍頻到40mhz 3 再5 分頻到8mhz 4 再9 倍頻到72...
STM32F107的時鐘設定
stm32的庫函式好像只有外部8m倍頻到72m,現在用的板子外部25m的晶振,如何倍頻到72m呢?解決辦法 stm32f107的時鐘分4步的 1 25mhz先除5分頻到5mhz 2 再8倍頻到40mhz 3 再5分頻到8mhz 4 再9倍頻到72mhz.stm32f103和stm32f105 stm...